欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Kubeadm部署K8S集群详细步骤

程序员文章站 2022-06-17 08:25:53
...

文章已同步更新到个人博客:使用Kubeadm部署K8S集群详细步骤

使用Kubeadm部署K8S集群详细步骤

一、集群中的虚拟机准备

节点名称 IP地址 节点类型 安装软件
k8s-server 192.168.116.130 master kube-apiserver
kube-schduler
kube-controller-manager
docker
flannel
kubelet
k8s-node 192.168.116.131 node kubelet
kube-proxy
docker
flannel

二、环境初始化

所有节点服务器都需要执行操作:

1、关闭防火墙

2、NetworkManager服务

3、SElinux

4、关闭swap分区

5、检查nf-call桥接功能是否开启

6、打开IP转发功能

7、设置Docker的yum源

8、设置K8S的yum源

1、关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

使用Kubeadm部署K8S集群详细步骤
2、关闭SElinux

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config  && setenforce 0

使用Kubeadm部署K8S集群详细步骤
3、关闭swap分区

  • swapoff -a # 临时关闭,重启不生效
    
  • sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久
    

使用Kubeadm部署K8S集群详细步骤
4、关闭NetworkManager

#service NetworkManager stop #临时关闭,重启不生效
#chkconfig NetworkManager off # 永久关闭

使用Kubeadm部署K8S集群详细步骤
5、检查nf-call桥接功能 是否开启

#永久更改
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

使用Kubeadm部署K8S集群详细步骤
6、打开IP转发功能

cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
EOF
sysctl -p

使用Kubeadm部署K8S集群详细步骤
7、设置docker的yum软件源

#若没有yum-config-manager命令,则执行这句命令,必要时更新一下yum,执行yum update
#yum install -y yum-utils device-mapper-persistent-data lvm2
#设置阿里源
#yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

使用Kubeadm部署K8S集群详细步骤
8、设置K8S的yum软件源

#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

三、所有服务器安装Docker、kubeadm、kubelet、kubectl

#yum install docker-ce -y
#yum install kubelet -y 
#yum install kubeadm -y 
#yum install kubectl -y
或者
#yum install docker-ce kubelet kubeadm kubectl -y

使用Kubeadm部署K8S集群详细步骤

四、设置阿里Docker镜像加速(所有服务器都执行)

参考文章: http://www.tianshaojiao.com/2020/10/23/studynote/container/1667

#mkdir -p /etc/docker
#vim /etc/docker/daemon.json
输入内容:
{
  "registry-mirrors": ["https://wos6ngjx.mirror.aliyuncs.com"]
}

五、启动Docker与kubelet服务(所有服务器都执行)

systemctl start docker;systemctl enable docker;systemctl enable kubelet

注意:此时K8S服务还没有启动,所以只是设置了开机自启动(systemctl enable kubelet);docker需要先启动以为后面安装k8s时,多个模块是通过容器启动的

六、初始化Master节点

在Master节点执行如下命令:

#kubeadm init --apiserver-advertise-address=192.168.116.130 --image-repository=registry.aliyuncs.com/google_containers  --kubernetes-version=v1.19.3 --pod-network-cidr=172.10.0.0/16 --service-cidr=10.10.0.0/16 --ignore-preflight-errors=swap

由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。

使用Kubeadm部署K8S集群详细步骤
等待片刻后(等待时间长短取决于你的网速了),初始化结果如下:
使用Kubeadm部署K8S集群详细步骤
若初始化时,出现提示swap的错误,如下所示:
使用Kubeadm部署K8S集群详细步骤
那么您需要配置kubelet配置文件,设置fail-swap-on为false;

#vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="fail-swap-on=false"

根据输出提示操作

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

使用Kubeadm部署K8S集群详细步骤
节点Node加入master需要根据输出提示,执行命令

kubeadm join 192.168.116.130:6443 --token spofau.t8y924pr8mf9x0c5 \
    --discovery-token-ca-cert-hash sha256:1c783c62e82060bf032692f9d235f244f0e4c4bd765ac8f9b167f3b091a1e913

默认token的有效期为24小时,当过期之后,该token就不可用了. 如果后续有nodes节点加入,解决方法如下:

#重新生成新的token
#kubeadm token create
#kubeadm token list
#获取ca证书sha256编码hash值
#openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

七、节点Node加入集群

在Node 节点执行 如下命令:

#kubeadm join 192.168.116.130:6443 --node-name 192.168.116.131 --token spofau.t8y924pr8mf9x0c5  --discovery-token-ca-cert-hash sha256:1c783c62e82060bf032692f9d235f244f0e4c4bd765ac8f9b167f3b091a1e913

使用Kubeadm部署K8S集群详细步骤
如果加入失败,可能是在node上面进行过kubeadm init,需要重置一下,再重新加入
kubeadm重置命令: #kubeadm reset
使用Kubeadm部署K8S集群详细步骤

八、安装网络插件(只在Master节点执行)

1、下载kube-flannel.yml文件,参考地址: http://www.tianshaojiao.com/2020/10/23/techarticles/1664

2、将下载的yml文件放到master服务器

3、修改flannel.yml文件,修改如下位置
使用Kubeadm部署K8S集群详细步骤
将镜像改为: lizhenliang/flannel:v0.12.0-amd64

4、执行yml

#kubectl apply -f flannel.yml

使用Kubeadm部署K8S集群详细步骤
使用Kubeadm部署K8S集群详细步骤
查看集群的node状态,安装完网络工具之后,只有显示如下状态,所有节点全部都Ready好了之后才能继续后面的操作

#ps -ef|grep flannel
#kubectl get nodes
#kubectl get pods -n kube-system

使用Kubeadm部署K8S集群详细步骤

只有全部都为1/1则可以成功执行后续步骤,如果flannel需检查网络情况,重新进行如下操作
kubectl delete -f kube-flannel.yml
然后重新wget,然后修改镜像地址,然后
kubectl apply -f kube-flannel.yml

九、测试集群(在Master节点执行)

#kubectl create deployment nginx --image=nginx
#kubectl expose deployment nginx --port=80 --type=NodePort
#kubectl get pods,svc

使用Kubeadm部署K8S集群详细步骤
使用Kubeadm部署K8S集群详细步骤

十、部署Dashboard(在Master节点执行)

1、下载kubernetes-dashboard.yaml文件,参考地址: http://www.tianshaojiao.com/2020/10/23/techarticles/1670

2、将下载的yml文件放到master服务器

3、修改kubernetes-dashboard.yaml文件,我把里面的 namespace统一改为: kube-system,也可以不用改的,但是其中必须要改的 如下所示:
使用Kubeadm部署K8S集群详细步骤
使用Kubeadm部署K8S集群详细步骤
4、执行yaml

#kubectl apply -f kubernetes-dashboard.yaml

使用Kubeadm部署K8S集群详细步骤
5、访问页面url: https://192.168.116.130:30206,端口为上图显示的30206
使用Kubeadm部署K8S集群详细步骤
6、 创建service account并绑定默认cluster-admin管理员集群角色:

#vim admin-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
#kubectl create -f admin-user.yaml

使用Kubeadm部署K8S集群详细步骤

#vim admin-user-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
#kubectl create -f  admin-user-role-binding.yaml

使用Kubeadm部署K8S集群详细步骤
查看绑定信息:

#kubectl get clusterrolebinding

使用Kubeadm部署K8S集群详细步骤
获取Token值

#kubectl -n kube-system get secret
#kubectl -n kube-system describe secret admin-user-token-4nb8c

使用Kubeadm部署K8S集群详细步骤
使用Kubeadm部署K8S集群详细步骤
复制Token,打开Dashboard页面,选择Token登录,填写复制好的Token信息,点击登录即可。
使用Kubeadm部署K8S集群详细步骤