K8S部署
时间:2023-10-19 02:07:01
- 一、单节点部署
-
- 1.关闭防火墙
- 2.更改主机名称
- 3、关闭swap,必须都关闭
- 4、安装docker源
- 5、安装kubeadm、kubelet核kubectl
- 6、master上操作初始化
- 7、查询
- 8、安装pod网络插件(flannel)
- 9、在master上打开监控
- 10、所有node节点上操作
- 11、加入集群
- 12、给node节点打标签
- 13、重新生成token
- 二、多节点部署
- 三、部署新版本
-
- 1.关闭防火墙
- 2、改主机名
- 3、关闭swap
- 4、安装docker源
- 5、安装docker
- 6、获取K8S源
- 7.安装新版本K8S
- 8、下载K8S核心组件
- 9、初始化master的K8S
- 下载网络插件calico
- 11.修改自定义网段
- 12、加入node
- 13、重新定义node名称
一、单节点部署
k8s与docker交互:
kubelet ——》创建Pod (一组容器集合)kubelet ——》dokcer-api接口
在1.17之前K8s和docker的交互通过dockershim交互-》docker的CRI交互docker的CRI Container Runtime Instance : docker运行时接口
CRI:从拉取镜像到启动运行和运行,再到简化暂停的整个生命周期: kubelet—》dockershim .——》docker-CRI创建这组容器
1.17之后,因为K8S宣布摒弃docker,而是将K8S与container互动界面改为contaiered,它可以与各种类型的容器兼容,而不仅仅是docker
问题:从外部访问pod容器中的流程是什么?
防火墙问防火墙-kube-proxy—》service —》 pod ip—》(K8S与docker 交互) dockershim —》CRI
(容器运行时的接口)-
master 192.168.133.50
node01 192.168.133.75
node02 192.168.133.100
1.关闭防火墙
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld [root@localhost ~]# setenforce 0
2.更改主机名称
[root@localhost ~]# hostname master [root@localhost ~]# hostname node01 [root@localhost ~]# hostname node02 [root@localhost ~]# su [root@master ~]# [root@node01 ~]# [root@node02~]#
[root@master ~]# vim /etc/hosts 三台都改
3、关闭swap,必须都关闭
swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab cat < /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 网络桥接 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
4、安装docker源
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
安装docker并设置启动自启动
yum install -y docker-ce systemctl start docker systemctl enable docker
5、安装kubeadm、kubelet核kubectl
#指定安装源
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
指定安装版本
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0 [root@node02 ~]# rpm -qa | grep kube kubeadm-1.15.0-0.x86_64 kubectl-1.15.0-0.x86_64 kubernetes-cni-0.8.7-0.x86_64 kubelet-1.15.0-0.x86_64
设置 kubelet开机自启
systemctl enable kubelet
6、master上操作初始化
[root@master ~]# kubeadm init \ --apiserver-advertise-address=192.168.133.50 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.15.0 \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16
[root@master ~]# mkdir -p $HOME/.kube [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kbe/config
7、查询
查询node节点状态
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 17m v1.15.0
查看节点健康状态
[root@master ~]# kubectl get csr
NAME AGE REQUESTOR CONDITION
csr-fxwzh 18m system:node:master Approved,Issued
查看pod信息
[root@master ~]# kubectl get pods [-n default] 默认是默认名称空间
No resources found.
[root@master ~]# kubectl get pods --all-namespaces
[root@master ~]# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-bccdc95cf-bqlhq 0/1 Pending 0 24m
kube-system coredns-bccdc95cf-sgq6d 0/1 Pending 0 24m
kube-system etcd-master 1/1 Running 0 23m
kube-system kube-apiserver-master 1/1 Running 0 23m
kube-system kube-controller-manager-master 1/1 Running 0 23m
kube-system kube-proxy-2m5nj 1/1 Running 0 24m
kube-system kube-scheduler-master 1/1 Running 0 23m
[root@master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-bccdc95cf-bqlhq 0/1 Pending 0 22m
coredns-bccdc95cf-sgq6d 0/1 Pending 0 22m
etcd-master 1/1 Running 0 21m
kube-apiserver-master 1/1 Running 0 21m
kube-controller-manager-master 1/1 Running 0 21m
kube-proxy-2m5nj 1/1 Running 0 22m
kube-scheduler-master 1/1 Running 0 22m
查看某一个pod的详细信息,也可以看node,server,后面一定要指定具体对象
[root@master ~]# kubectl describe pod coredns-bccdc95cf-bqlhq -n kube-system
8、安装pod网络插件(flannel)
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
这时master节点上的状态就是ready了
[root@master ~]# kubectl get nodes -A
NAME STATUS ROLES AGE VERSION
master Ready master 78m v1.15.0
9、在master上打开监控
[root@master ~]# watch -n 1 kubectl get csr
10、所有node节点上操作
docker pull lizhenliang/flannel:v0.11.0-amd64
11、加入集群
kubeadm join 192.168.133.50:6443 --token 2ra2st.181aau6zsjkvnfh8 \
--discovery-token-ca-cert-hash sha256:59f0b469b18fc4b22d867efc5918c58e7862b4bfdef86be7987617045b4ddca7
k8s master节点放在node节点上的代理,同时为这个代理设置一个身份,就是bootstrap
master 上查询
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 102m v1.15.0
node01 Ready 7m27s v1.15.0
node02 Ready 7m27s v1.15.0
12、给node节点打标签
[root@master ~]# kubectl label node node01 node-role.kubernetes.io/node=node
node/node01 labeled
[root@master ~]# kubectl label node node02 node-role.kubernetes.io/node=node
node/node02 labeled
13、重新生成token
#若token 过期或丢失,需要先申请新的token 令牌
[root@master ~]# kubeadm token create
skqg14.hugbx9sjfpptzc3w
#列出token
[root@master ~]# kubeadm token list | awk -F" " '{print $1}' |tail -n 1
skqg14.hugbx9sjfpptzc3w
#然后获取CA公钥的的hash值
[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'
(stdin)= 59f0b469b18fc4b22d867efc5918c58e7862b4bfdef86be7987617045b4ddca7
#替换join中token及sha256:
kubeadm join 192.168.226.128:6443 --token skqg14.hugbx9sjfpptzc3w
–discovery-token-ca-cert-hash sha256:59f0b469b18fc4b22d867efc5918c58e7862b4bfdef86be7987617045b4ddca7
二、多节点部署
关键是load balancer
三、新版本部署
1、关闭防火墙
2、改主机名
3、关闭swap
4、安装docker源
5、安装docker
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker --now
或者
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
6、获取K8S源
7、安装新版本K8S
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
systemctl enable --now kubelet
8、下载K8S核心组件
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images [@]}; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
chmod +x ./images.sh && ./images.sh
9、初始化master的K8S
[root@master ~]# kubeadm init \
--apiserver-advertise-address=192.168.133.50 \
--control-plane-endpoint=master \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.9 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
###如果kubeadm init失败,则需要:
先,kubeadm reset(重置)并且根据提示,再删除一些目录,例如以下:
rm -rf $HOME/.kube
rm -rf /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
10、下载网络插件calico
[root@master ~]# curl https://docs.projectcalico.org/manifests/calico.yaml -O
11、修改自定义网段
[root@master ~]# vim calico.yaml
改
[root@master ~]# kubectl apply -f calico.yaml
12、加入node
在master
[root@master ~]# watch -n 1 kubectl get pod -A
calico-node状态变更后
主节点变成ready
这时在node节点加入集群
kubeadm join master:6443 --token s53s4o.1mm1s2yrz95r45dv \
--discovery-token-ca-cert-hash sha256:c8a76117c9f46c23666d1a72753455d1016fae689838f4e6dc38bebf3d1c5b52
13、重新定义node名称
[root@master ~]# kubectl label node node01 node-role.kubernetes.io/node=node
node/node01 labeled
[root@master ~]# kubectl label node node02 node-role.kubernetes.io/node=node
node/node02 labeled