测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
Kubernetes----基于kubeadm工具在CentOS7.9虚拟机上部署一主两从类型的1.26版本的Kubernetes集群环境
收藏本文
作者:redrose2100 类别: 日期:2023-10-11 17:16:20 阅读:516 次 消耗积分:0 分
[【原文链接】Kubernetes----基于kubeadm工具在CentOS7.9虚拟机上部署一主两从类型的1.26版本的Kubernetes集群环境](http://devops-dev.com/article/680) [TOC] ![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/715a4b7e-4c10-11ee-9168-0242ac110004.png) # 一、虚拟机环境准备 ## 1.1 准备三台CentOS操作系统的虚拟机 环境规划信息如下,准备三台虚拟机,虚拟机的资源配置根据自身资源情况配置,最好设置2核以上,内存4G以上,磁盘50G以上,当然资源越多越好。 |主机名|ip地址|cpu|内存|磁盘| |:---:|:---:|:---:|:---:| |master|192.168.116.40|8核|32G|120G| |node1|192.168.116.41|8核|32G|120G| |node2|192.168.116.42|8核|32G|120G| ## 1.2 修改主机名 按照1.1中的主机名称的规划设置主机名,设置命令如下 ```bash hostnamectl set-hostname master # 在192.168.116.40 上执行 hostnamectl set-hostname node1 # 在192.168.116.41 上执行 hostnamectl set-hostname node2 # 在192.168.116.42 上执行 ``` 设置完成后,可以通过执行 hostname 命令查看主机名称是否正确配置。 ## 1.3 确认CentOS的版本符合要求 使用CentOS操作系统要求版本要大于等于7.5 ,可通过如下命令查看,确认CentOS操作系统的版本符合要求 ```bash cat /etc/redhat-release ``` ## 1.4 配置地址解析 在三台虚拟机中分别编辑 /etc/hosts 文件,增加如下内容 ```bash 192.168.116.40 master 192.168.116.41 node1 192.168.116.42 node2 ``` 配置完成后,分别在master节点上ping node1和node2,在node1节点上ping master和node2,在node2节点上ping master和node1节点,若均能ping通,则表示地址解析配置成功。 ## 1.5 配置时间同步 在三台虚拟机上均执行如下命令 ```bash systemctl start chronyd systemctl enable chronyd ``` 配置完成后,可分别在三台虚拟机上执行date命令,大概确认时间是否已保持一致。如时间已保持一致,表明配置成功。 ## 1.6 关闭防火墙 在三台虚拟机上均执行如下命令,关闭防火墙(测试环境可以直接关闭,生产环境则需要谨慎考虑) ```bash systemctl stop firewalld systemctl disable firewalld systemctl stop iptables systemctl disable iptables ``` ## 1.7 禁用selinux 在三台虚拟机上分别编辑 /etc/selinux/config 文件,然后将 SELINUX=enforcing 修改为 SELINUX=disabled,如下为修改后的配置 ```bash # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted ``` 修改后需要重启才会生效,这里暂时先不重启,待后续配置都配置完成后统一重启。 ## 1.8 禁用swap分区 在三台服务器编辑 /etc/fstab 文件,然后将 /dev/mapper/centos-swap swap 一行注释,比如这里编辑后的配置如下所示 ```bash /dev/mapper/centos-root / xfs defaults 0 0 UUID=d2b7d48e-aec4-42ab-926a-6531422bd16e /boot xfs defaults 0 0 #/dev/mapper/centos-swap swap swap defaults 0 0 ``` 同样这里暂时也先不重启,待后续配置完成后统一重启。 ## 1.9 修改Linux内核参数 在三台服务器上创建 /etc/sysctl.d/kubernetes.conf 文件,文件中增加如下内容 ```bash net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip.forward = 1 ``` 然后分别在三台服务器上执行如下命令,使配置生效 ```bash sysctl -p ``` 然后分别在三台服务器上执行如下命令加载 br_netfilter 模块 ```bash modprobe br_netfilter ``` 然后执行如下命令查看模块是否已被加载 ```bash lsmod | grep br_netfilter ``` 当显示结果如下所示,则表示模块已被正确加载 ```bash [root@k8s-3 ~]# lsmod | grep br_netfilter br_netfilter 22256 0 bridge 151336 1 br_netfilter [root@k8s-3 ~]# ``` ## 1.10 配置ipvs功能 在三台服务器上执行如下命令安装软件包 ipset和ipvsadm ```bash yum install -y ipset ipvsadm ``` 然后在三台服务器上分别创建 /etc/sysconfig/modules/ipvs.modules 文件,文件内容如下: ```bash #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 ``` 然后执行如下命令为文件增加可执行权限 ```bash chmod +x /etc/sysconfig/modules/ipvs.modules ``` 然后执行如下命令,即执行上述文件 ```bash bash /etc/sysconfig/modules/ipvs.modules ``` 执行完成后,通过执行 lsmod|grep ip_vs 命令查看结果,如下所示则表示配置成功 ```bash [root@k8s-3 ~]# lsmod|grep ip_vs ip_vs_sh 12688 0 ip_vs_wrr 12697 0 ip_vs_rr 12600 0 ip_vs 145458 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr nf_conntrack 139264 2 ip_vs,nf_conntrack_ipv4 libcrc32c 12644 3 xfs,ip_vs,nf_conntrack [root@k8s-3 ~]# ``` ## 1.11 重启三台服务器 至此,服务器的基础配置已经配置完成,此时可以重启三台服务器了。 # 二、安装Docker ## 2.1 配置Docker镜像源 ```bash wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum clean all yum makecache ``` ## 2.2 安装Docker 首先执行如下命令查看Docker的版本 ```bash yum list docker-ce --showduplicates ``` 然后选择一个版本,比如这里选择 20.10.16-3.el7 版本,分别在三台服务器上执行如下命令安装Docker ```bash yum install -y --setopt=obsolutes=0 docker-ce-20.10.16-3.el7 ``` ## 2.3 配置 daemon.json 在三台服务器上编辑 /etc/docker/daemon.json 文件,配置如下内容 ```bash { "exec-opts":["native.cgroupdriver=systemd"], "registry-mirrors":["https://ooe7wn09.mirror.aliyuncs.com"] } ``` ## 2.4 启动Docker并设置开机自启动 执行如下命令即可启动Docker并设置开机自启动Docker ```bash systemctl start docker systemctl enable docker ``` ## 2.5 启用CRI 编辑 /etc/containerd/config.toml 文件,将 disabled_plugins = ["cri"] 一行注释 ![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/e6b1038c-680c-11ee-b536-0242ac110004.png) 然后重启 containerd ```bash systemctl restart containerd systemctl restart docker ``` ## 2.6 安装 cri-dockerd 下载并安装rpm ```bash wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm ``` 修改配置 /usr/lib/systemd/system/cri-docker.service, ExecStart 修改为如下内容 ```bash ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7 ``` 然后启动 ```bash systemctl daemon-reload systemctl enable --now cri-docker ``` # 三、部署Kubernetes ## 3.1 配置Kubernetes的的阿里云的源 在三台服务器上编辑 /etc/yum.repos.d/kubernetes.repo 文件,文件内容如下 ```bash [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg ``` 然后在三台服务器上执行如下命令更新yum源 ```bash yum clean all yum makecache ``` ## 3.2 安装 kubeadm、kubelet、kubectl 然后通过如下命令查看可以安装的版本 ```bash yum list --showduplicates | grep kubeadm ``` 比如这里可以安装 1.26.8-0 版本,即在三台服务器上执行如下命令安装 kubeadm,kubelet,kubectl ```bash yum install -y --setopt=obsolutes=0 kubeadm-1.26.8-0 kubelet-1.26.8-0 kubectl-1.26.8-0 ``` ## 3.3 配置 kubelet 在三台服务器上编辑 /etc/sysconfig/kubelet 文件,然后编写如下内容 ```bash KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" ``` 然后执行如下命令设置 kubelet 开机自启动 ```bash systemctl enable kubelet ``` ## 3.4 准备k8s集群环境需要的镜像 首先通过 kubeadm config images list 命令查看需要的镜像以及tag值,比如这里是 ```bash registry.k8s.io/kube-apiserver:v1.26.9 registry.k8s.io/kube-controller-manager:v1.26.9 registry.k8s.io/kube-scheduler:v1.26.9 registry.k8s.io/kube-proxy:v1.26.9 registry.k8s.io/pause:3.9 registry.k8s.io/etcd:3.5.6-0 registry.k8s.io/coredns/coredns:v1.9.3 ``` 因为k8s官网在国外,这里需要先从阿里云上下载,然后通过修改tag值的方式改为和k8s官网一样的,然后再进行安装 在三台服务器上执行如下命令 ```bash images=(kube-apiserver:v1.26.9 kube-controller-manager:v1.26.9 kube-scheduler:v1.26.9 kube-proxy:v1.26.9 pause:3.9 etcd:3.5.6-0 coredns:v1.9.3) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName done docker tag k8s.gcr.io/coredns:v1.9.3 k8s.gcr.io/coredns/coredns:v1.9.3 ``` 然后通过 docker images 查看镜像,如下所示即此时镜像与k8s需要的官方镜像一致了 ```bash [root@master ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 d7b085374dbc 6 weeks ago 581MB k8s.gcr.io/kube-apiserver v1.21.14 e58b890e4ab4 14 months ago 126MB k8s.gcr.io/kube-controller-manager v1.21.14 454f3565bb8a 14 months ago 120MB k8s.gcr.io/kube-scheduler v1.21.14 f1e56fded161 14 months ago 50.9MB k8s.gcr.io/kube-proxy v1.21.14 93283b563d47 14 months ago 104MB k8s.gcr.io/pause 3.4.1 0f8457a4c2ec 2 years ago 683kB k8s.gcr.io/coredns/coredns v1.8.0 296a6d5035e2 2 years ago 42.5MB k8s.gcr.io/coredns v1.8.0 296a6d5035e2 2 years ago 42.5MB k8s.gcr.io/etcd 3.4.13-0 0369cf4303ff 3 years ago 253MB [root@master ~]# ``` ## 3.5 k8s集群初始化 注意,此时只需在master节点执行如下命令即可 ```bash kubeadm init --kubernetes-version=v1.26.9 --pod-network-cidr=10.240.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.116.40 --cri-socket=unix:///var/run/cri-dockerd.sock --image-repository registry.aliyuncs.com/google_containers ``` 如下图所示,出现 “successfuly” 字样表示部署成功 ![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/fd34f6d8-4c0d-11ee-9168-0242ac110004.png) 然后根据回显中的提示,执行如下三条命令 ![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/3df4fa1a-4c0e-11ee-9168-0242ac110004.png) ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 根据提示,如下图所示,继续执行如下命令 ![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/73baea60-4c0e-11ee-9168-0242ac110004.png) ```bash export KUBECONFIG=/etc/kubernetes/admin.conf ``` 此时通过 kubectl get nodes 命令可以查看当前集群环境的节点信息,如下所示,此时集群环境中只有一个master节点 ```bash [root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady control-plane,master 8m38s v1.21.10 [root@master ~]# ``` 在集群初始化的结果回显中如下图所示已经给出提示了,通过在节点服务器上执行如下命令即可增加集群节点,因此此时可以到node1和node2节点上执行此命令。 ![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/1b8c7f92-4c0f-11ee-9168-0242ac110004.png) ```bash kubeadm join 192.168.116.40:6443 --token gcd293.mazg2vbx7td1q84g \ --discovery-token-ca-cert-hash sha256:f6e8a63c31cf3b6b0e902368992d7358cdbd6de36c3e71bed291fa0ecd64fabd --cri-socket=unix:///var/run/cri-dockerd.sock ``` 然后再次在master节点中查看集群的节点信息,如下所示,此时集群环境中已经存在三个节点了 ```bash [root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady control-plane 6m48s v1.26.8 node1 NotReady
26s v1.26.8 node2 NotReady
5s v1.26.8 ``` ## 3.6 安装网络插件 注意,这里只需要在master节点上操作,即在master节点上执行如下命令 ```bash cd /opt/ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` 然后编辑配置文件,将配置文件中namespace修改为 kube-system,子网范围也需要配置跟前面k8s初始化的时候一致,比如这里是 10.240.0.0/16,修改完成后,就可以执行如下命令了。 ```bash kubectl apply -f kube-flannel.yml ``` 稍微等待一两分钟,再次在master节点上查看集群节点状态,如下所示,此时master、node1、node2节点状态均为Ready状态了 ```bash [root@master opt]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready control-plane,master 15m v1.21.10 node1 Ready
4m4s v1.21.10 node2 Ready
3m52s v1.21.10 [root@master opt]# ``` 至此,一主两从的Kubernetes集群环境就搭建完成了。
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/680
上一篇:
AI----人工智能简介
下一篇:
lmbench----lmbench性能测试工具迁移至openEuler操作系统实践
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件