?節(jié)點(diǎn)信息:
172.31.7.101? ?master1? ? ?控制節(jié)點(diǎn)
172.31.7.102? ? ?node1? ? ?工作節(jié)點(diǎn)
172.31.7.103? ? ?node2? ? ?工作節(jié)點(diǎn)
?這里使用containerd作為運(yùn)行時(shí),部署可參照
https://blog.csdn.net/weixin_46476452/article/details/127670046
目錄
一、系統(tǒng)環(huán)境初始化
二、配置apt源、下載kubeadm
三、安裝cni
四、初始化kubernetes
五、配置節(jié)點(diǎn)認(rèn)證,加入集群
六、部署calico網(wǎng)絡(luò)插件
七、驗(yàn)證
八、報(bào)錯(cuò)處理
一、系統(tǒng)環(huán)境初始化
1、關(guān)閉swap
# swapoff -a
# sed -i 's@/swap@#/swap@' /etc/fstab
2、時(shí)鐘同步
如果沒有時(shí)鐘服務(wù)下載一個(gè)
# apt install chrony
# systemctl status chronyd
# # systemctl status chronyd
3、配置內(nèi)核參數(shù)
(1)、加載模塊
# modprobe br_netfilter
(2)、添加內(nèi)核參數(shù)
# 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
?我系統(tǒng)防火墻本身就已經(jīng)關(guān)閉,因此未列出,請知悉
二、配置apt源、下載kubeadm
1、安裝https包傳輸工具apt-transport-https,支持https的apt源
# apt-get update && apt-get install -y apt-transport-https
2、把key導(dǎo)入,用于校驗(yàn)包的完整性
# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
3、此時(shí)還沒用添加倉庫源,因此沒有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
?可以看見很多版本的kubeadm包,都是阿里云鏡像倉庫提供的,版本號要與k8s版本號保持一致
? 下載 1.24.3版本
# apt-get install kubeadm=1.24.3-00 kubectl=1.24.3-00 kubelet=1.24.3-00
?
三、安裝cni
cni 是 K8s 中標(biāo)準(zhǔn)調(diào)用網(wǎng)絡(luò)實(shí)現(xiàn)的接口。Kubelet 通過這個(gè)標(biāo)準(zhǔn)的 API 來調(diào)用不同的網(wǎng)絡(luò)插件以實(shí)現(xiàn)不同的網(wǎng)絡(luò)配置方式。實(shí)現(xiàn)了這個(gè)接口的就是 CNI 插件,它實(shí)現(xiàn)了一系列的 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解壓(提前創(chuàng)建/opt/cni/bin/目錄)
# tar xvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/
?四、初始化kubernetes
1、下載鏡像(提前下載,初始化集群的時(shí)候可節(jié)省時(shí)間)
????? 1.1、列出我們初始化v1.24.3版本kubernetes,所需要的鏡像
?這些鏡像默認(rèn)是使用Google官方鏡像倉庫,無法直接訪問,我們可以從國內(nèi)的阿里鏡像倉庫下載
???? 1.2、編寫腳本,執(zhí)行腳本下載鏡像
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中創(chuàng)建容器時(shí)默認(rèn)使用google官方鏡像倉庫的鏡像k8s.gcr.io/pause:3.7 ,需要修改為國內(nèi)的鏡像 (3.7版本是根據(jù)上面#kubeadm config images list --kubernetes-version v1.24.3 列出的),該鏡像是封裝POD底層網(wǎng)絡(luò)的,實(shí)現(xiàn)一個(gè)POD內(nèi)多個(gè)容器公用同一個(gè)網(wǎng)絡(luò)
?? 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(監(jiān)聽地址就是當(dāng)前本機(jī)ip地址)
--apiserver-bind-port=6443 (apiserver監(jiān)聽端口默認(rèn)就是6443)
--kubernetes-version=v1.24.3 (當(dāng)前K8S實(shí)際版本號)
--pod-network-cidr=10.100.0.0/16 ?(pod網(wǎng)絡(luò))
--service-cidr=10.200.0.0/16 ? (service網(wǎng)絡(luò),和pod網(wǎng)絡(luò)不能一樣)--service-dns-domain=cluster.local ?(service域名后綴,默認(rèn)是cluster.local)
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers (把鏡像倉庫指向阿里云的倉庫)
--ignore-preflight-errors=swap ? (忽略因開啟swap而報(bào)錯(cuò))
?初始化成功
上面的回顯包括兩四部分信息
第一:表示初始化成功
第二:表示某個(gè)節(jié)點(diǎn)想要使用集群需要配置認(rèn)證文件,具體命令以給出
第三:需要安裝網(wǎng)絡(luò)插件flannel或者calico,并且給出了下載地址
第四: 添加worker節(jié)點(diǎn)需要執(zhí)行的指令
五、配置節(jié)點(diǎn)認(rèn)證,加入集群
剛初始化完成后是無法使用kubectl get查看到資源信息的,因?yàn)楣?jié)點(diǎn)上的api service默認(rèn)會(huì)連接本機(jī)的8080端口而不是api service默認(rèn)的6443端口,因此各節(jié)點(diǎn)都需要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并且使用了證書做認(rèn)證,因此每個(gè)節(jié)點(diǎn)都需要有這個(gè)文件才能連接到api service
?kubectl默認(rèn)使用$HOME/.kube/config文件,向集群提供認(rèn)證信息的
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文件拷貝到兩個(gè)node節(jié)點(diǎn)上,否則會(huì)有認(rèn)證問題服務(wù)正常執(zhí)行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節(jié)點(diǎn)
root@node1:~# kubeadm join 172.31.7.101:6443 --token qwqjvh.0pg5kl4crvetbjce \
> --discovery-token-ca-cert-hash sha256:f02108644fd8bb51862765f604ee5dc59630e66d535b25191bf32644df835871
六、部署calico網(wǎng)絡(luò)插件
calico.yaml官網(wǎng)路徑如下截圖
Customize Calico configuration
1、下載calico.yaml
curl https://raw.githubusercontent.com/projectcalico/calico/v3.24.4/manifests/calico.yaml -O
2、修改calico.yaml
它默認(rèn)的是192.168.0.0/16 把這個(gè)地址修改成我們初始化時(shí)給定的pod地址
3、啟動(dòng)calico網(wǎng)絡(luò)插件
# kubectl apply -f calico.yaml?
七、驗(yàn)證
1、查看節(jié)點(diǎn)狀態(tài),都已ready
2、查看pod狀態(tài)
3、服務(wù)測試
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
?創(chuàng)建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
?訪問任意節(jié)點(diǎn)的30004端口
?八、報(bào)錯(cuò)處理
?? ?????? 第一次初始化不成功,看了下containerd服務(wù)狀態(tài)有pause字段告警
?恢復(fù)到初始化前狀態(tài)文章來源:http://www.zghlxwxcb.cn/news/detail-638844.html
還原初始化之前狀態(tài)
# kubeadm reset
# systemctl restart containerd.service
?查看配置文件發(fā)現(xiàn)鏡像路徑少一個(gè)符號,導(dǎo)致拉不到鏡像,修改后再進(jìn)行初始化就OK了文章來源地址http://www.zghlxwxcb.cn/news/detail-638844.html
到了這里,關(guān)于使用kubeadm部署kubernetes 1.24.3的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!