【云原生 | 从零开始学Kubernetes】二、使用kubeadm搭建K8S集群

简介: kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。

安装要求


·两台或者多台机器,为centos7


·2GB及以上内存,2个CPU及以上,硬盘30G


·集群中所有机器之间网络互通


·可以访问外网


·禁止swap分区


kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。


准备环境


角色

IP

master

192.168.11.139

node1

192.168.11.140

node2

192.168.11.141

初始化


首先,我们要在三台机子上做一些操作。


关闭防火墙,selinux,swap,设置主机名,ip解析,时间同步。


# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
# 永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config  
# 临时关闭
setenforce 0  
# 关闭swap
# 临时
swapoff -a 
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 根据规划设置主机名【master节点上操作】
hostnamectl set-hostname k8smaster
# 根据规划设置主机名【node1节点操作】
hostnamectl set-hostname k8snode1
# 根据规划设置主机名【node2节点操作】
hostnamectl set-hostname k8snode2
# 在master添加hosts
vim /etc/hosts
192.168.11.139 k8smaster
192.168.11.140 k8snode1
192.168.11.141 k8snode2
# 将桥接的IPv4流量传递到iptables的链
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 生效
sysctl --system 
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com


安装Docker/kubeadm/kubelet


首先配置一下Docker的阿里yum源


vim /etc/yum.repos.d/docker.repo
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg


然后yum方式安装docker


# yum安装
yum -y install docker-ce
# 查看docker版本
docker --version  
# 启动docker
systemctl enable docker
systemctl start docker


配置docker的镜像源


vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}


然后重启docker


添加kubernetes软件源 三台机子


然后我们还需要配置一下yum的k8s软件源


vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg


安装kubeadm,kubelet和kubectl


由于版本更新频繁,这里指定版本号部署


# 安装kubelet、kubeadm、kubectl,同时指定版本
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 设置开机启动  
systemctl enable kubelet


部署Kubernetes Master


在 192.168.177.139 执行,也就是master节点


kubeadm init \  
--apiserver-advertise-address=192.168.11.139 \  # 当前主机ip
--image-repository registry.aliyuncs.com/google_containers \  # 镜像    
--kubernetes-version v1.18.0 \  # 版本
--service-cidr=10.96.0.0/12  \  # 这个参数后的IP地址直接就套用10.96.0.0/12 ,以后安装时也套用即可,不要更改
--pod-network-cidr=10.244.0.0/16  #k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个10.244.0.0/16


由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址,我们 docker images 命令即可查看已经拉取的镜像。


14.png


当我们出现下面的情况时,表示kubernetes的镜像已经安装成功 然后用里面提示的命令


15.png


使用kubectl工具


mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config


执行完成后,我们使用下面命令,查看我们正在运行的节点


kubectl get nodes


16.png


能够看到,目前有一个master节点已经运行了,但是还处于未准备状态


下面我们还需要在Node节点执行其它的命令,将node1和node2加入到我们的master节点上


加入Kubernetes Node


下面我们需要到 node1 和 node2服务器,执行下面的代码向集群添加新节点


执行在kubeadm init输出的kubeadm join命令:


注意,以下的命令是在master初始化完成后,每个人的都不一样!!!需要复制自己生成的


kubeadm join 192.168.11.139:6443 --token oheovn.apns356uiesu58pa \
    --discovery-token-ca-cert-hash sha256:fff629d1ea3a0f082a23a94965adbcc30159b3b9fc50743300f7d75b9653a4be


默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:


kubeadm token create --print-join-command


当我们把两个节点都加入进来后,我们就可以去Master节点 执行下面命令查看情况


kubectl get node


17.png


部署CNI网络插件master


上面的状态还是NotReady,下面我们需要网络插件,来进行联网访问


# 下载网络插件配置
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。


# 添加
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 查看状态 【kube-system是k8s中的最小单元】
kubectl get pods -n kube-system


18.png

运行完成后,我们查看状态可以发现,已经变成了Ready状态了


18.png


如果上述操作完成后,还存在某个节点处于NotReady状态,可以在Master将该节点删除


master节点将该节点删除
kubectl delete node k8snode1
# 然后到k8snode1节点进行重置
kubeadm reset
# 重置完后在加入
kubeadm join 192.168.11.139:6443 --token oheovn.apns356uiesu58pa \
    --discovery-token-ca-cert-hash sha256:fff629d1ea3a0f082a23a94965adbcc30159b3b9fc50743300f7d75b9653a4be


测试kubernetes集群


我们都知道K8S是容器化技术,它可以联网去下载镜像,用容器的方式进行启动


在Kubernetes集群中创建一个pod,验证是否正常运行:


# 下载nginx 【会联网拉取nginx镜像】
kubectl create deployment nginx --image=nginx
# 查看状态
kubectl get pod


如果我们出现Running状态的时候,表示已经成功运行了


19.png


下面我们就需要将端口暴露出去,让其它外界能够访问


# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看一下对外的端口
kubectl get pod,svc


能够看到,我们已经成功暴露了 80端口 到 31865了


20.png


我们到我们的宿主机浏览器上,访问如下地址


http://192.168.11.139:31865/


发现我们的nginx已经成功启动了


到这里为止,我们就搭建了一个单master的k8s集群

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
570 2
|
10月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
976 33
|
10月前
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
11月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
11月前
|
弹性计算 人工智能 资源调度
DeepSeek大解读系列公开课上新!阿里云专家主讲云上智能算力、Kubernetes容器服务、DeepSeek私有化部署
智猩猩「DeepSeek大解读」系列公开课第三期即将开讲,聚焦阿里云弹性计算助力大模型训练与部署。三位专家将分别讲解智能算力支撑、Kubernetes容器服务在AI场景的应用实践、以及DeepSeek一键部署和多渠道应用集成,分享云计算如何赋能大模型发展。欲观看直播,可关注【智猩猩GenAI视频号】预约。 (239字符)
|
10月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
434 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
5月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
572 16
|
5月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
|
9月前
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。

热门文章

最新文章

推荐镜像

更多