1 使用kubeadm部署Kubernetes
如無特殊說明,以下操作可以在所有節點上進行。
1.1 首先我們需要配置一下阿里源
cat?<<EOF?>?/etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
1.2 開始安裝
執行以下命令開始安裝,可以默認安裝也可以指定版本安裝,目前的最新版本是1.24.1,默認即安裝此版本。
yum?install?-y?kubelet-1.24.1?kubeadm-1.24.1?kubectl-1.24.1?--disableexcludes=kubernetes
或
yum?install?kubelet?kubeadm?kubectl
1.3 安裝后查看版本
kubeadm?version
1.4 設置kubelet開機啟動
systemctl?enable?--now?kubelet
1.5 初始化kubeadm配置信息
kubeadm?config?print?init-defaults?>kubeadm-init.yaml
如上圖所示,可以看出image倉庫位置在k8s.gcr.io,為了防止拉取報錯,可以配置成阿里云地址,定制出的config內容主要做了如下修改:
imageRepository為阿里云的registry
設置kubelet的cgroupDriver為systemd
設置kube-proxy代理模式為ipvs
apiVersion:?kubeadm.k8s.io/v1beta3
mode:?ipvs????????????????????????????????????????????#?kube-proxy?模式
bootstrapTokens:
-?groups:-?system:bootstrappers:kubeadm:default-node-tokentoken:?abcdef.0123456789abcdefttl:?24h0m0susages:-?signing-?authentication
kind:?InitConfiguration
cgroupDriver:?systemd???????????????????#?配置?cgroup?driver
localAPIEndpoint:advertiseAddress:?192.168.183.133?#?ip地址bindPort:?6443
nodeRegistration:criSocket:?unix:///var/run/containerd/containerd.sockimagePullPolicy:?IfNotPresentname:?nodeataints:?null
---
apiServer:timeoutForControlPlane:?4m0s
apiVersion:?kubeadm.k8s.io/v1beta3
certificatesDir:?/etc/kubernetes/pki
clusterName:?kubernetes
controllerManager:?{}
dns:?{}
etcd:local:dataDir:?/var/lib/etcd
imageRepository:?registry.aliyuncs.com/google_containers?#?阿里源
kind:?ClusterConfiguration
kubernetesVersion:?1.24.1
networking:dnsDomain:?cluster.localserviceSubnet:?10.1.0.0/12podSubnet:?10.88.0.0/16??????????????????#?ip網段
scheduler:?{}
詳細的配置說明可以參考該文檔:https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/
1.6 拉取依賴鏡像
在開始初始化集群之前,可以預先在各個服務器節點上拉取所k8s需要的如下容器鏡像:
kube-apiserver:v1.24.0
kube-controller-manager:v1.24.0
kube-scheduler:v1.24.0
kube-proxy:v1.24.0
pause:3.7
etcd:3.5.3-0
coredns:v1.8.6
kubeadm?config?images?pull?--config?kubeadm-init.yaml
2 Master節點操作
2.1 集群初始化
kubeadm?init?--config?kubeadm-init.yaml
初始化過程中,可能會遇到“/proc/sys/net/bridge/bridge-nf-call-iptables does not exist”的錯誤,這是因為之前配置的br_netfilter沒有啟動,運行一下這個命令即可
modprobe?br_netfilter
如果一切正常,則會遇到如下提示,
以及最重要的token
2.2 配置常規用戶使用kubectl訪問集群
mkdir?-p?$HOME/.kube
sudo?cp?-i?/etc/kubernetes/admin.conf?$HOME/.kube/config
sudo?chown?$(id?-u):$(id?-g)?$HOME/.kube/config
2.3 保存配置文件
kubectl?-n?kube-system?get?cm?kubeadm-config?-o?yaml
2.4 查看節點狀態
kubectl?get?node
3 Node節點操作
3.1 ?加入集群
kubeadm?join?192.168.183.133:6443?--token?abcdef.0123456789abcdef?\--discovery-token-ca-cert-hash?sha256:9ec147b59acdd7ac4f6d3b7b5bf378cf46535aa77117878d49e926a638eaf307
出現如下信息,則說明Node節點已經成功加入到集群
執行如下命令,發現網絡報錯
kubectl?get?nodes
出現如上錯誤,我是把master節點上的admin.conf同步到兩個node節點里,不知道大家是如何解決這個問題的。在master節點做如下操作
scp?/etc/kubernetes/admin.conf?node02:/etc/kubernetes/
scp?/etc/kubernetes/admin.conf?node02:/etc/kubernetes/
在兩個節點上同時執行如下命令:
mkdir?-p?$HOME/.kube
cp?/etc/kubernetes/admin.conf?~/.kube/config
3.2 安裝網絡插件
我們有兩種選擇,一個是Flannel,另一個是Calico
由CoreOS開發的項目Flannel,可能是最直接和最受歡迎的CNI插件。它是容器編排系統中最成熟的網絡結構示例之一,旨在實現更好的容器間和主機間網絡。許多常見的Kubernetes集群部署工具和許多Kubernetes發行版都可以默認安裝Flannel。
Calico是Kubernetes生態系統中另一種流行的網絡選擇。雖然Flannel被公認為是最簡單的選擇,但Calico以其性能、靈活性而聞名。Calico的功能更為全面,不僅提供主機和pod之間的網絡連接,還涉及網絡安全和管理。Calico CNI插件在CNI框架內封裝了Calico的功能。
此處我們使用Flannel插件。
wget?https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
下載后需要修改里面的配置,首先設置一下網卡
其次需要設置一下網段,這里的網段和 1.5 步驟中的podSubnet的值保持一直,都是
10.88.0.0/16
執行命令
kubectl?apply?-f?kube-flannel.yml
做出了如上操作之后還不行,還是會報錯,主要是CNI版本兼容性問題,這里可以把containerd中的CNI去除掉
mv?/etc/cni/net.d/10-containerd-net.conflist?/etc/cni/net.d/10-containerd-net.conflist.bak
systemctl?daemon-reload
systemctl?restart?containerd?kubelet
3.3 集群驗證
kubectl?get?cs
kubectl?get?nodes
再執行一下如下命令,查看是否所有的pod都是運行正常的:
kubectl?get?pod?--all-namespaces?-o?wide
3.4 驗證DNS解析
創建busybox.yaml
apiVersion:?v1
kind:?Pod
metadata:name:?busyboxnamespace:?default
spec:containers:-?name:?busyboximage:?busyboxcommand:-?sleep-?"3600"imagePullPolicy:?IfNotPresentrestartPolicy:?Always
kubectl?create?-f?busybox.yaml
驗證一下狀態
kubectl?get?pods?busybox

DNS檢查
kubectl?exec?-i?-t?busybox?--?nslookup?kubernetes.default
排錯 根據這篇文章(https://dockone.io/article/10399)的排查,我也檢查了一下我的CentOS內核版本,是3.10,比較老,需要升級一下。
經過一系列排錯后,再次執行如下命令:
kubectl?exec?-i?-t?busybox?--?nslookup?kubernetes.default
[root@master?~]#?kubectl?exec?-ti?busybox?--?nslookup?kubernetes
Server:?????????10.1.0.10
Address:????????10.1.0.10#53
Name:???kubernetes.default.svc.cluster.local
Address:?10.1.0.1
目前的操作只是練手而已,想要搭建高可用的集群任重道遠,需要投入更多精力。
參考鏈接
http://www.manongjc.com/detail/25-lioggelnywerjyf.html https://www.kubernetes.org.cn/1904.html https://www.toutiao.com/article/7105957860210819623/ https://i4t.com/5451.html https://blog.frognew.com/2022/05/kubeadm-install-kubernetes-1.24.html