赞
踩
节点信息:
- 172.31.7.101 master1 控制节点
- 172.31.7.102 node1 工作节点
- 172.31.7.103 node2 工作节点
这里使用containerd作为运行时,部署可参照
https://blog.csdn.net/weixin_46476452/article/details/127670046
目录
- 1、关闭swap
- # swapoff -a
- # sed -i 's@/swap@#/swap@' /etc/fstab
-
- 2、时钟同步
- 如果没有时钟服务下载一个
- # apt install chrony
- # systemctl status chronyd
- # # systemctl status chronyd
-
- 3、配置内核参数
- (1)、加载模块
- # modprobe br_netfilter
- (2)、添加内核参数
- # echo -e "net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-iptables = 1 " >> /etc/sysctl.conf
-
- (3)、配置生效
- # sysctl -p
- net.ipv4.ip_forward = 1
- net.bridge.bridge-nf-call-iptables = 1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
我系统防火墙本身就已经关闭,因此未列出,请知悉
- 1、安装https包传输工具apt-transport-https,支持https的apt源
- # apt-get update && apt-get install -y apt-transport-https
-
- 2、把key导入,用于校验包的完整性
- # curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
-
- 3、此时还没用添加仓库源,因此没有kubeadm
- # apt-cache madison kubeadm
- N: Unable to locate package kubeadm
-
- 3、添加kubeadm镜像阿里云的仓库源
- # cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
- > deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
- > EOF
-
- 4、更新仓库
- # apt-get update
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
可以看见很多版本的kubeadm包,都是阿里云镜像仓库提供的,版本号要与k8s版本号保持一致
下载 1.24.3版本
# apt-get install kubeadm=1.24.3-00 kubectl=1.24.3-00 kubelet=1.24.3-00
cni 是 K8s 中标准调用网络实现的接口。Kubelet 通过这个标准的 API 来调用不同的网络插件以实现不同的网络配置方式。实现了这个接口的就是 CNI 插件,它实现了一系列的 CNI API 接口。常见的 CNI 插件包括 Calico、flannel
Releases · containernetworking/plugins · GitHub
- 1、下载cni
- # wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
-
-
- 2、cni解压(提前创建/opt/cni/bin/目录)
- # tar xvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/
1、下载镜像(提前下载,初始化集群的时候可节省时间)
1.1、列出我们初始化v1.24.3版本kubernetes,所需要的镜像
这些镜像默认是使用Google官方镜像仓库,无法直接访问,我们可以从国内的阿里镜像仓库下载
1.2、编写脚本,执行脚本下载镜像
- root@master1:/usr/local/src# cat images-down.sh
- #!/bin/bash
- nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.24.3
- nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.24.3
- nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.24.3
- nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.24.3
- nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7
- nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.3-0
-
1.3、下载完毕
2、修改配置文件
- # vim /etc/containerd/config.toml
-
- 61 sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"
- 127 SystemdCgroup = true
-
- 将61行Google镜像替换成阿里云的镜像
- 将127行值改为true
在K8S中创建容器时默认使用google官方镜像仓库的镜像k8s.gcr.io/pause:3.7 ,需要修改为国内的镜像 (3.7版本是根据上面#kubeadm config images list --kubernetes-version v1.24.3 列出的),该镜像是封装POD底层网络的,实现一个POD内多个容器公用同一个网络
3、kubeadm初始化:
- root@master1:~# kubeadm init --apiserver-advertise-address=172.31.7.101 \
- > --apiserver-bind-port=6443 \
- > --kubernetes-version=v1.24.3 \
- > --pod-network-cidr=10.100.0.0/16 \
- > --service-cidr=10.200.0.0/16 \
- > --service-dns-domain=cluster.local \
- > --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
- > --ignore-preflight-errors=swap
命令注解:
--apiserver-advertise-address=172.31.7.101(监听地址就是当前本机ip地址)
--apiserver-bind-port=6443 (apiserver监听端口默认就是6443)
--kubernetes-version=v1.24.3 (当前K8S实际版本号)
--pod-network-cidr=10.100.0.0/16 (pod网络)
--service-cidr=10.200.0.0/16 (service网络,和pod网络不能一样)--service-dns-domain=cluster.local (service域名后缀,默认是cluster.local)
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers (把镜像仓库指向阿里云的仓库)
--ignore-preflight-errors=swap (忽略因开启swap而报错)
初始化成功
上面的回显包括两四部分信息
第一:表示初始化成功
第二:表示某个节点想要使用集群需要配置认证文件,具体命令以给出
第三:需要安装网络插件flannel或者calico,并且给出了下载地址
第四: 添加worker节点需要执行的指令
刚初始化完成后是无法使用kubectl get查看到资源信息的,因为节点上的api service默认会连接本机的8080端口而不是api service默认的6443端口,因此各节点都需要config文件来获取这些信息
- 查看config配置文件的信息
- root@master1:~# kubectl config view
- apiVersion: v1
- clusters:
- - cluster:
- certificate-authority-data: DATA+OMITTED
- server: https://172.31.7.101:6443
-
- 指定了连接172.31.7.101:6443,
- DATA+OMITTED并且使用了证书做认证,因此每个节点都需要有这个文件才能连接到api service
kubectl默认使用$HOME/.kube/config文件,向集群提供认证信息的
- master1:~# mkdir -p $HOME/.kube
- master1:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- master1:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config
将 $HOME/.kube/config文件拷贝到两个node节点上,否则会有认证问题服务正常执行kubectl
- root@node1:~# mkdir /root/.kube/
- root@node2:~# mkdir /root/.kube/
-
- root@master1:~# scp /root/.kube/config node1:/root/.kube/
- root@master1:~# scp /root/.kube/config node2:/root/.kube/
依次加入worker节点
- root@node1:~# kubeadm join 172.31.7.101:6443 --token qwqjvh.0pg5kl4crvetbjce \
- > --discovery-token-ca-cert-hash sha256:f02108644fd8bb51862765f604ee5dc59630e66d535b25191bf32644df835871
calico.yaml官网路径如下截图
Customize Calico configuration
1、下载calico.yaml
curl https://raw.githubusercontent.com/projectcalico/calico/v3.24.4/manifests/calico.yaml -O
2、修改calico.yaml
它默认的是192.168.0.0/16 把这个地址修改成我们初始化时给定的pod地址
3、启动calico网络插件
# kubectl apply -f calico.yaml
1、查看节点状态,都已ready
2、查看pod状态
- root@master1:~# cat nginx.yaml
- kind: Deployment
- #apiVersion: extensions/v1beta1
- apiVersion: apps/v1
- metadata:
- labels:
- app: myserver-nginx-deployment-label
- name: myserver-nginx-deployment
- namespace: myserver
- spec:
- replicas: 1
- selector:
- matchLabels:
- app: myserver-nginx-selector
- template:
- metadata:
- labels:
- app: myserver-nginx-selector
- spec:
- containers:
- - name: myserver-nginx-container
- image: nginx
- #command: ["/apps/tomcat/bin/run_tomcat.sh"]
- #imagePullPolicy: IfNotPresent
- imagePullPolicy: Always
- ports:
- - containerPort: 80
- protocol: TCP
- name: http
- - containerPort: 443
- protocol: TCP
- name: https
- env:
- - name: "password"
- value: "123"
- - name: "age"
- value: "18"
-
- ---
- kind: Service
- apiVersion: v1
- metadata:
- labels:
- app: myserver-nginx-service-label
- name: myserver-nginx-service
- namespace: myserver
- spec:
- type: NodePort
- ports:
- - name: http
- port: 80
- protocol: TCP
- targetPort: 80
- nodePort: 30004
- - name: https
- port: 443
- protocol: TCP
- targetPort: 443
- nodePort: 30443
- selector:
- app: myserver-nginx-selector
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
创建nginx.yaml资源
- root@master1:~# kubectl create ns myserver
- namespace/myserver created
-
- root@master1:~# kubectl apply -f nginx.yaml
- deployment.apps/myserver-nginx-deployment created
- service/myserver-nginx-service created
访问任意节点的30004端口
第一次初始化不成功,看了下containerd服务状态有pause字段告警
恢复到初始化前状态
- 还原初始化之前状态
- # kubeadm reset
- # systemctl restart containerd.service
查看配置文件发现镜像路径少一个符号,导致拉不到镜像,修改后再进行初始化就OK了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。