Kubeadm部署Kubernetes(v1.23.0)集群详细指南

Kubeadm部署Kubernetes(v1.23.0)集群详细指南,第1张

使用kubeadm快速部署一个k8s集群

文章目录 使用kubeadm快速部署一个k8s集群前言一、准备环境二、 *** 作系统初始化配置【所有节点都要执行】1.关闭防火墙2.清空iptables规则3.关闭SElinux4.关闭swap分区5.根据规划设置主机名6.在节点上添加hosts7.将桥接的IPv4流量传递到iptables的链 --调整优化内核的参数8.时间同步 三、部署docker/kubeadm/kubelet【所有节点】1.安装docker2.配置镜像加速3.添加k8s的阿里云yum软件源4.安装kubeadm、kubectl、kubelet5.部署K8s-Master6.将k8s的node节点加入集群7.部署容器网络(CNI)8.k8s命令tab补全功能配置 四.常见错误1.kubeadm init 未执行完成,提示失败2.如果已经确定了问题并采取措施之后还是init失败,报exits字样3.查看calico的pod为非Running状态,下载镜像失败 总结


前言

部署k8s有两种方式
1)二进制部署
2)kubeadm方式部署
 kubeadm工具功能:

kubeadm init:初始化一个master节点;kubeadm join:将工作-node节点加入集群;kubeadm upgrade:升级k8s的版本;kubeadm token:管理kubeadm join使用的令牌;kubeadm reset:清空kubeadm init或者kubeadm join对主机所作的任何更改;kubeadm version:打印kubeadm的版本;kubeadm alpha:预览可用的新功能;

这里采用kubadm方式进行kubernetes集群的搭建;

一、准备环境

架构图:

软件环境:

软件版本
*** 作系统Centos 7.9_x64
docker20-ce
kubernetesv1.23.0

服务器规划:

角色IP
k8s-master192.168.1.1
k8s-node1192.168.1.2
k8s-node2192.168.1.3


二、 *** 作系统初始化配置【所有节点都要执行】 1.关闭防火墙
[root@localhost ~]# systemctl stop firewalld 
[root@localhost ~]# systemctl disable firewalld 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
2.清空iptables规则
[root@localhost ~]# iptables -F 
[root@localhost ~]# iptables -nvL 
Chain INPUT (policy ACCEPT 30 packets, 1980 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 16 packets, 1520 bytes)
 pkts bytes target     prot opt in     out     source               destination     
3.关闭SElinux
[root@localhost ~]# setenforce 0     #临时关闭
[root@localhost ~]# sed -i 's/enforcing/disabled/g' /etc/selinux/config  #永久关闭
[root@localhost ~]# getenforce  #查看selinux状态
Permissive
4.关闭swap分区
[root@localhost ~]# sed -i 's/*.swap.*/$&/' /etc/fstab  #永久关闭-重启后生效
[root@localhost ~]# swapoff -a #暂时关闭
[root@localhost ~]# free -h 
              total        used        free      shared  buff/cache   available
Mem:           3.7G        458M        2.8G         23M        412M        3.0G
Swap:            0B          0B          0B
5.根据规划设置主机名
[root@localhost ~]# hostnamectl set-hostname k8s-master #master上 *** 作
[root@localhost ~]# bash 
[root@localhost ~]# hostnamectl set-hostname k8s-node1 #node1上 *** 作
[root@localhost ~]# bash 
[root@localhost ~]# hostnamectl set-hostname k8s-node2 #node2上 *** 作
[root@localhost ~]# bash 
....
6.在节点上添加hosts
[root@k8s-master ~]# cat > /etc/hosts << EOF
 192.168.1.1 k8s-master
 192.168.1.2 k8s-node1
 192.168.1.3 k8s-node2 
 EOF
7.将桥接的IPv4流量传递到iptables的链 --调整优化内核的参数
[root@k8s-master ~]# cat > /etc/sysctl.d/k8s.conf << EOF 
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1 #使iptables也能处理网桥bridge产生的流量
> EOF
[root@k8s-master ~]# sysctl --system #进行加载配置
8.时间同步
[root@k8s-master ~]# ntpdate asia.pool.ntp.org 
26 Mar 23:06:36 ntpdate[9417]: step time server 17.253.116.253 offset -28798.713312 sec


三、部署docker/kubeadm/kubelet【所有节点】 1.安装docker
[root@k8s-master ~]# yum update
[root@k8s-master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
[root@k8s-master ~]# yum -y install docker-ce #默认下载的是最新版的docker
[root@k8s-master ~]# systemctl enable docker && systemctl start docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@k8s-master ~]# systemctl status docker 
[root@k8s-master ~]# docker info
2.配置镜像加速
[root@k8s-master ~]# cat > /etc/docker/daemon.json << EOF
 {
   "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], 
   "exec-opts": ["native.cgroupdriver=systemd"] 
 }
 EOF
[root@k8s-master ~]# systemctl restart docker.service 

“registry-mirrors”: [“https://b9pmyelo.mirror.aliyuncs.com”]:使用阿里云的加速,否则下载镜像会慢;

“exec-opts”: [“native.cgroupdriver=systemd”]:指的是systemd套件里实现了cgroup封装的能力,是centos7里一个强大的套件,k8s也推荐使用systemd驱动,与k8s集成更好(也算是一种调优),默认的话是使用的cgroupfs;

3.添加k8s的阿里云yum软件源
[root@k8s-master ~]# cat > /etc/yum.repos.d/kubernetes.repo << EOF
> [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
> EOF
4.安装kubeadm、kubectl、kubelet
由于k8s版本更新频繁,所以这里我们要指定版本号进行部署
[root@k8s-master ~]# yum -y install kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
[root@k8s-master ~]# systemctl enable kubelet #这里把kubelet设置为自启动,先不要启动,一会儿初始化的时候会自动启动kubelet(现在启动也起不来,缺少kubelet的配置文件)
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
5.部署K8s-Master
[root@k8s-master ~]# kubeadm init \
   --apiserver-advertise-address=192.168.1.1 \
   --image-repository registry.aliyuncs.com/google_containers \
   --kubernetes-version v1.23.0 \
   --service-cidr=10.96.0.0/12 \
   --pod-network-cidr=10.244.0.0/16 \
   --ignore-preflight-errors=all

–apiserver-advertise-address 集群通告地址,就是集群通信的地址,要指定内网IP!
–image-repository 由于默认拉取镜像的地址是k8s.gcr.io国内无法访问,所以这里指定阿里云的镜像仓库地址;
–kubernetes-version k8s的版本,需要与上面安装的一致;
–service-cidr 集群内部的虚拟网络,pod的统一访问入口;
–pod-network-cdir pod的网络,需要与后面部署的CNI网络组件yaml中CALICO_IPV4POOL_CIDR字段保持一致;
–ignore-preflight-errprs=all 在初始化master的时候,会进行一系列的检查,这个选项可以跳过error;

初始化完成后,最后会输出一个join命令,用于node节点加入集群,先记住下面要用到;
例如:kubeadm join 192.168.1.1:6443 --token h77r38.7u4lh0gq8hh8c4pw --discovery-token-ca-cert-hash sha256:fb43f68785633aa1888f115591263e8231c7d9ff2a72ee0104163bf205684d3b

拷贝kubectl使用的连接k8s认证配置文件到默认路径

[root@k8s-master ~]#   mkdir -p $HOME/.kube
[root@k8s-master ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config
6.将k8s的node节点加入集群

在node节点上执行;向集群添加新节点,执行在kubeadm init 输出的kebeadm join命令:

[root@k8s-node1 ~]# kubeadm join 192.168.1.1:6443 --token h77r38.7u4lh0gq8hh8c4pw --discovery-token-ca-cert-hash sha256:fb43f68785633aa1888f115591263e8231c7d9ff2a72ee0104163bf205684d3b

#默认token有效期为24小时,当过期后,这个token就不能用了,这时就需要重新创建token,可以直接使用如下命令快捷生成token:

[root@k8s-master kubernetes]# kubeadm token create --print-join-command
kubeadm join 192.168.1.1:6443 --token q0rvf4.rrr2b6qupwsi9mfj --discovery-token-ca-cert-hash sha256:fb43f68785633aa1888f115591263e8231c7d9ff2a72ee0104163bf205684d3b

参考资料:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-join/

7.部署容器网络(CNI)

当我们把node节点加入集群后会发现他的状态时NotReady(不可用),那是因为网络插件还没有部署;接下来部署网络插件calico;

[root@k8s-master ~]#  kubectl get nodes 
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   28m     v1.23.0
k8s-node1    NotReady   <none>                 9m37s   v1.23.0
k8s-node2    NotReady   <none>                 9m34s   v1.23.0

calico是一个纯三层的数据中心网络方案,是目前k8s主流的网络方案;
#下载YAML

[root@k8s-master ~]# wget https://docs.projectcalico.org/manifests/calico.yaml

下载完之后还需要修改里面定义的pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm
init初始化的–pod-network-cdir(pod所使用的网络)指定的一样;

[root@k8s-master ~]#vim calico.yaml
- name: CALICO_IPV4POOL_CIDR 
  value: "10.244.0.0/16"

修改完calico.yaml文件后,需要进行部署calico pod;

[root@k8s-master ~]# kubectl apply -f calico.yaml 
[root@k8s-master ~]# kubectl get pods -n kube-system
calico-kube-controllers-56fcbf9d6b-qtxch   1/1     Running   0             6m49s
calico-node-2mw65                          1/1     Running   0             6m49s
calico-node-sl2t6                          1/1     Running   0             6m49s
calico-node-zbd49                          1/1     Running   0             6m49s
coredns-6d8c4cb4d-4lfn6                    1/1     Running   0             41m
coredns-6d8c4cb4d-9zfg2                    1/1     Running   0             41m
etcd-k8s-master                            1/1     Running   0             42m
kube-apiserver-k8s-master                  1/1     Running   0             42m
kube-controller-manager-k8s-master         1/1     Running   0             42m
kube-proxy-5c2w6                           1/1     Running   0             23m
kube-proxy-h42w8                           1/1     Running   0             41m
kube-proxy-hcn58                           1/1     Running   0             23m
kube-scheduler-k8s-master                  1/1     Running   1             42m

等calico pod都Running之后,node节点也会准备就绪;

[root@k8s-master ~]# kubectl get nodes 
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   42m   v1.23.0
k8s-node1    Ready    <none>                 23m   v1.23.0
k8s-node2    Ready    <none>                 23m   v1.23.0

提示:以后所有的yaml文件都只在master节点执行
安装目录:/etc/kubernetes/
组件配置文件目录:/etc/kubernetes/manifests/

参考资料:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network

至此,kubeadm部署k8s集群就部署完成了;

8.k8s命令tab补全功能配置
[root@k8s-master ~]# yum -y install bash-completion
[root@k8s-master ~]# source /usr/share/bash-completion/bash_completion 
[root@k8s-master ~]# source <(kubectl completion bash)  #临时在当前终端生效,终端关闭的话就失效;
[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc  #永久生效,  .bashrc这个文件里面的内容会在所有终端打开前执行一次,以达到只要打开终端就会生效的作用;

source <(kubectl completion bash) #临时在当前终端生效,终端关闭的话就失效;
source <(kubectl completion bash)" >> ~/.bashrc #永久生效; .bashrc这个文件里面的内容会在所有终端打开前执行一次,以达到只要打开终端就会生效的作用;




四.常见错误 1.kubeadm init 未执行完成,提示失败

 一般是系统初始话没做好,可以 systemctl restart kubelet 重启下kubelet再看看有没有错误日志 journalctl -u kubelet | egrep -i “cgroup|failed|error”
常见的原因有

swap没有关闭cgroup驱动没有配置为systemd系统需要yum update更新下最新的软件包
2.如果已经确定了问题并采取措施之后还是init失败,报exits字样

 尝试修复问题后执行 kubeadm reset(卸载) 再执行init;


3.查看calico的pod为非Running状态,下载镜像失败

 可能是因为网络原因下载不下来镜像导致超时;可以使用grep image calico.yaml 获取镜像地址,然后手动在所有节点上docker pull 列出的镜像,然后重新部署;
kubectl delete -f calico.yaml
kubectl apply -f calico.yaml




总结

以上就是kubeadm部署kubernetes的步骤以及会出现的问题,有不足之处还请多多指点;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/1499100.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存