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

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

一、集群中的虚拟机准备

节点名称IP地址节点类型安装软件
k8s-server192.168.116.130masterkube-apiserver
kube-schduler
kube-controller-manager
docker
flannel
kubelet
k8s-node192.168.116.131nodekubelet
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

在这里插入图片描述
2、关闭SElinux

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

在这里插入图片描述
3、关闭swap分区

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

在这里插入图片描述
4、关闭NetworkManager

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

在这里插入图片描述
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

在这里插入图片描述
6、打开IP转发功能

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

在这里插入图片描述
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

在这里插入图片描述
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

在这里插入图片描述

四、设置阿里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国内无法访问,这里指定阿里云镜像仓库地址。

在这里插入图片描述
等待片刻后(等待时间长短取决于你的网速了),初始化结果如下:
在这里插入图片描述
若初始化时,出现提示swap的错误,如下所示:
在这里插入图片描述
那么您需要配置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

在这里插入图片描述
节点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

在这里插入图片描述
如果加入失败,可能是在node上面进行过kubeadm init,需要重置一下,再重新加入
kubeadm重置命令: #kubeadm reset
在这里插入图片描述

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

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

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

3、修改flannel.yml文件,修改如下位置
在这里插入图片描述
将镜像改为: lizhenliang/flannel:v0.12.0-amd64

4、执行yml

#kubectl apply -f flannel.yml

在这里插入图片描述
在这里插入图片描述
查看集群的node状态,安装完网络工具之后,只有显示如下状态,所有节点全部都Ready好了之后才能继续后面的操作

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

在这里插入图片描述

只有全部都为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

在这里插入图片描述
在这里插入图片描述

十、部署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,也可以不用改的,但是其中必须要改的 如下所示:
在这里插入图片描述
在这里插入图片描述
4、执行yaml

#kubectl apply -f kubernetes-dashboard.yaml

在这里插入图片描述
5、访问页面url: https://192.168.116.130:30206,端口为上图显示的30206
在这里插入图片描述
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

在这里插入图片描述

#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

在这里插入图片描述
查看绑定信息:

#kubectl get clusterrolebinding

在这里插入图片描述
获取Token值

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

在这里插入图片描述
在这里插入图片描述
复制Token,打开Dashboard页面,选择Token登录,填写复制好的Token信息,点击登录即可。
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐