锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

K8S部署

时间:2023-10-19 02:07:01 ad7819yrz集成电路ic

  • 一、单节点部署
    • 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
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章