kubernetes使用kubeadm創(chuàng)建集群實操教程(全)
根據(jù)官方文檔,總共有三種使用部署工具安裝kubernetes的方式,分別是使用kubeadm 引導集群、使用kOps安裝 Kubernetes、使用Kubespray安裝 Kubernetes。
在本次部署設計中,采用kubeadm引導集群的方式,主要運用了安裝kubeadm、對kubeadm進行故障排查、使用kubeadm創(chuàng)建集群。目標是要安裝單個控制平面的Kubernetes集群,在集群上安裝Pod網(wǎng)絡,以便Pod可以相互連通。
一、虛擬機準備
準備三臺預先安裝docker、cri-docker環(huán)境、kubernetes組件、cri-docker環(huán)境的虛擬機。
(一)主機基本配置
創(chuàng)建虛擬機,根據(jù)官方文檔,本次實驗在CentOS 8環(huán)境下進行,主機內存設置4GB,處理器個數(shù)為4,采用NAT網(wǎng)絡適配器。
(二)安裝docker
詳細安裝過程:CentOS 8:在Linux環(huán)境下安裝和卸載Docker
1. 安裝docker
yum install -y yum-utils device-mapper-persistent-data lvm2
2. 設置阿里云源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3. 安裝 Docker Engine-Community
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
4. 設置docker開機自動啟動
systemctl enable docker
(三)配置cri-docker環(huán)境
1. 提前下載cri-docker環(huán)境拖入虛擬機,解壓縮并移動到指定位置
tar -xf cri-dockerd-0.3.4.amd64.tgz -C /usr/local/ ls /usr/local mv /usr/local/cri-dockerd/cri-dockerd /usr/local/bin/
2. 配置cri-dockerd.service文件
vim /etc/systemd/system/cri-dockerd.service
# cri-dockerd.service文件內容 [Unit] Description=CRI Interface for Docker Application Container Engine Documentation=https://docs.mirantis.com After=network-online.target firewalld.service docker.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --docker-endpoint=unix:///var/run/docker.sock --cri-dockerd-root-directory=/var/lib/docker ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target
3. 配置cri-dockerd.socket文件
vim /etc/systemd/system/cri-dockerd.socket
# cri-dockerd.socket文件內容 [Unit] Description=CRI Docker Socket for the API PartOf=cri-docker.service [Socket] ListenStream=/var/run/cri-dockerd.sock SocketMode=0660 SocketUser=root SocketGroup=docker [Install] WantedBy=sockets.target
4. 啟動cri-docker服務
systemctl daemon-reload systemctl start cri-dockerd.service systemctl enable cri-dockerd.service
(四)安裝kubeadm、kubelet、kubectl
kubeadm:用來初始化集群的指令。
kubelet:在集群中的每個節(jié)點上用來啟動 Pod 和容器等。
kubectl:用來與集群通信的命令行工具。
1. 配置kubernetes的yum源
vim /etc/yum.repos.d/kubernetes.repo
# kubernetes.repo文件內容 [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
2. 安裝Kubernetes三大組件
dnf install kubelet kubeadm kubectl
3. 設置kubectl開機自動啟動
systemctl enable kubectl
(五)克隆主機
1. 進入克隆虛擬機向導,選擇創(chuàng)建完整克隆
2. 根據(jù)需要為克隆主機重命名,修改存儲位置
二、環(huán)境配置工作
在三臺主機中均要進行如下的環(huán)境配置工作
(一)修改主機名
對三臺主機分別修改主機名
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
(二)編輯hosts文件
1. 查看主機ip地址
ifconfig
2. 編輯/etc/hosts文件
vim /etc/hosts
# /etc/hosts文件內容 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.211.137 master 192.168.211.136 slave1 192.168.211.138 slave2
(三)關閉防火墻、selinux、swap
1. 關閉防火墻
避免后續(xù)需要配置開放端口
systemctl stop firewalld.service systemctl disable firewalld.service
2. 關閉selinux
selinux會限制容器對宿主機文件系統(tǒng)和系統(tǒng)資源的訪問權限
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
3. 關閉swap分區(qū),編輯/etc/fstab文件
kubelet要求必須禁用交換分區(qū),kubeadm初始化時會檢測swap是否關閉
vim /etc/fstab
修改/etc/fstab文件內容,注釋swap行
# /etc/fstab文件內容(局部) # /dev/mapper/cl-swap none swap defaults 0 0
(四)配置同步時間、系統(tǒng)模塊
1. 設置本地時區(qū),加載RTC設置
確保集群中的各個組件在進行各種操作時具有一致的時間戳
timedatectl set-local-rtc 0 timedatectl set-timezone Asia/Shanghai hwclock –systohc
2. 加載和檢查系統(tǒng)模塊
確保Kubernetes網(wǎng)絡和容器的正常運行
modprobe br_netfilter lsmod | grep br_netfilter
(五)配置SSH免密登錄
配置Kubernetes集群需要在不同的節(jié)點之間進行通信和操作,配置SSH免密登錄能夠簡化操作,避免每次執(zhí)行操作都需要手動輸入密碼。
1. 生成新的密鑰對
ssh-keygen
2. 將公鑰復制到目標主機
ssh-copy-id root@master ssh-copy-id root@slave1 ssh-copy-id root@slave2
3. 檢驗配置結果
ssh root@master ssh root@slave1 ssh root@slave2
三、準備容器所需的鏡像
由于無法訪問外網(wǎng),不能下載存放在registry.k8s.io上的默認容器鏡像,這里選擇在阿里云上進行拉取鏡像,然后使用tag命令修改為它需求的鏡像標簽,以下操作在三臺主機中都要進行。
(一)查看所需鏡像文件
查看Kubernetes集群需要的鏡像
kubeadm config images list
(二)配置daemon.json文件
1. 在阿里云中啟用鏡像加速器
2. 配置/etc/docker/daemon.json文件
在阿里云操作文檔的基礎上添加驅動命令修改docker的驅動為systemd,使其與與k8s保持一致,避免沖突
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors":["https://2nd8r72o.mirror.aliyuncs.com"], "exec-opts":[ "native.cgroupdriver=systemd" ] } EOF
3. 載入daemon.json文件并重啟docker
systemctl daemon-reload systemctl restart docker
(三)拉取鏡像文件
拉取阿里云里所需要的鏡像
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.4 docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.4 docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.4 docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.28.4 docker pull registry.aliyuncs.com/google_containers/pause:3.9 docker pull registry.aliyuncs.com/google_containers/etcd:3.5.9-0 docker pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
(四)修改鏡像標簽
使用tag修改為需求的鏡像標簽
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.4 registry.k8s.io/kube-apiserver:v1.28.4 docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.4 registry.k8s.io/kube-controller-manager:v1.28.4 docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.4 registry.k8s.io/kube-scheduler:v1.28.4 docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.28.4 registry.k8s.io/kube-proxy:v1.28.4 docker tag registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.9 docker tag registry.aliyuncs.com/google_containers/etcd:3.5.9-0 registry.k8s.io/etcd:3.5.9-0 docker tag registry.aliyuncs.com/google_containers/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1
(五)查看鏡像結果
查看本地鏡像,確認是否有需要的鏡像
docker images
四、具體節(jié)點配置
(一)初始化Kubernetes集群
1. 在主節(jié)點執(zhí)行初始化的命令
apiserver-advertise-address用來指定API服務器的廣播地址。
kubernetes-version指定要安裝的Kubernetes版本。
service-cidr指定服務網(wǎng)絡的CIDR范圍。
pod-network-cidr指定Pod網(wǎng)絡的CIDR范圍。
ignore-preflight-errors=all忽略所有預檢錯誤。
cri-socket指定容器運行時的UNIX套接字路徑。
另外,由于前一步驟已經(jīng)安裝了集群所需的鏡像,在命令進行時會提示鏡像已存在而不再拉取,故也不再需要設置image-repository的值
kubeadm init \ --apiserver-advertise-address=192.168.211.137 \ --kubernetes-version v1.28.4 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --ignore-preflight-errors=all \ --cri-socket=unix:///var/run/cri-dockerd.sock
如果報錯則輸入下面命令恢復原有狀態(tài)
systemctl stop kubelet rm -rf /etc/kubernetes/* systemctl stop docker rm -rf /var/lib/kubelet/ rm -rf /var/lib/etcd
在這一部分出現(xiàn)的主要問題是:在前期原本只安裝了docker而沒有安裝cri-dockerd,經(jīng)過查資料發(fā)現(xiàn)k8s在1.20.X版本以后就棄用了docker,于是臨時改用containerd,重新在containerd拉取鏡像和改標簽,但在使用中仍有bug無法解決。于是選擇安裝cri-dockerd再次進行以上命令,執(zhí)行成功。
2. 初始化成功顯示以下內容
Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.211.137:6443 --token ejgoxs.086hnhj7qipovd6v \ --discovery-token-ca-cert-hash sha256:6bbe9e754e2b0ab13301e76268c347b9f95b661b2399630ecfa8da9497ca5744
初始化成功后虛擬機卡頓嚴重,通過關閉后提高處理器、內存等配置得以緩解
3. 根據(jù)提示運行kubectl
我使用root用戶,可以直接設置KUBECONFIG環(huán)境變量,可以讓kubectl命令行工具自動找到并使用這個配置文件
export KUBECONFIG=/etc/kubernetes/admin.conf
(二)部署Pod網(wǎng)絡
部署Pod網(wǎng)絡是為了提供容器間和跨節(jié)點的網(wǎng)絡通信,實現(xiàn)網(wǎng)絡策略和安全性,支持服務發(fā)現(xiàn)和負載均衡
1. 進入提示的網(wǎng)站,選擇flannel網(wǎng)絡組件
2. 安裝CNI網(wǎng)絡插件
根據(jù)網(wǎng)站內提示,F(xiàn)lannel默認用作 CNI 網(wǎng)絡插件,部署Flannel時需確保CNI網(wǎng)絡插件有安裝,由于國內訪問Github不穩(wěn)定,這里提前下載好插件,拖入虛擬機的主目錄,再進行解壓等命令
mkdir -p /opt/cni/bin tar -C /opt/cni/bin -xzf cni-plugins-linux-amd64-v1.2.0.tgz
3. 使用kubectl部署flannel
根據(jù)網(wǎng)站內提示,提前下載好yml文件,拖入虛擬機的主目錄,再輸入命令
kubectl apply -f kube-flannel.yml
(三)加入子節(jié)點
1. 在主節(jié)點中將kubeconfig環(huán)境變量分發(fā)到子節(jié)點
kubeconfig環(huán)境變量指定了kubectl命令使用的kubeconfig文件的路徑,該文件包含了連接到集群所需的認證和配置信息,讓子節(jié)點上的kubectl命令能夠連接到Kubernetes集群的控制平面
scp /etc/kubernetes/admin.conf slave1:/etc/kubernetes/ scp /etc/kubernetes/admin.conf slave2:/etc/kubernetes/
設計結束后,在官方安裝文檔上注意到其實建議不要將admin.conf文件與任何人共享,應該使用kubeadm kubeconfig user命令為其他用戶生成 kubeconfig文件
2. 在兩個node節(jié)點中輸入以下命令
由于同時有containerd和docker,在提示的命令基礎上加了cri-socket參數(shù),指定為cri-dockerd
kubeadm join 192.168.211.137:6443 \ --token ejgoxs.086hnhj7qipovd6v \ --discovery-token-ca-cert-hash sha256:6bbe9e754e2b0ab13301e76268c347b9f95b661b2399630ecfa8da9497ca5744 \ --cri-socket=unix:///var/run/cri-dockerd.sock
報錯則輸入下面命令恢復原有狀態(tài),再根據(jù)報錯提示進行調整
rm -rf /etc/kubernetes/kubelet.conf rm -rf /etc/kubernetes/pki/ca.crt systemctl restart kubelet
(四)確保節(jié)點Ready狀態(tài)
1. 查看節(jié)點狀態(tài)
kubectl get nodes
2. 顯示NotReady,需要修改yml文件
原因是pod之間無法ping通,需要讓flanneld包發(fā)到指定網(wǎng)卡,數(shù)據(jù)包才能正常的經(jīng)過flannel進行傳送
ifconfig vim kube-flannel.yml
在kube-flannel.yml文件第139行加上
- --iface=ens160
再次查看顯示正確
kubectl get nodes
3. 查看命名空間kube-system的pod的狀態(tài)
kubectl get pods -n kube-system
五、Kubernetes集群測試
(一)創(chuàng)建mynginx pod
創(chuàng)建一個nginx鏡像,向Kubernetes集群提交一個Pod創(chuàng)建的請求,控制平面會根據(jù)集群的配置和調度策略,在可用的節(jié)點上選擇一個節(jié)點來運行這個Pod。
kubectl create deployment mynginx --image=nginx
(二)暴露端口
創(chuàng)建一個Service資源,并將其關聯(lián)到mynginx Pod,將其與集群的外部網(wǎng)絡連接起來,指定Service的端口為80,并使用NodePort類型,NodePort類型會在每個節(jié)點上選擇一個端口,將外部流量轉發(fā)到Service的端口上。
kubectl expose deployment mynginx --port=80 --type=NodePort
(三)訪問nginx
通過瀏覽器訪問任一節(jié)點的IP地址和暴露的NodePort端口,可以訪問到nginx服務,說明測試成功
192.168.211.136:30619
192.168.211.138:30619
六、總結
到此這篇關于kubernetes使用kubeadm創(chuàng)建集群實操教程(全) 的文章就介紹到這了,更多相關kubernetes使用kubeadm創(chuàng)建集群內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
VScode連接遠程服務器踩坑實戰(zhàn)記錄(新版離線vscode-server安裝)
本文主要介紹了如何使用VScode連接遠程服務器,并對離線安裝vscode-server進行了詳細的操作步驟說明,其中包括VScode擴展的安裝與配置,vscode-server的離線下載,文件的解壓縮和移動,以及VScode的一些更新設置,能夠幫助讀者更好地理解和掌握VScode連接遠程服務器的方法2024-10-10服務器共享文件夾設置軟件、文件共享服務器軟件和共享文件夾加密工具的選擇
這篇文章主要介紹了服務器共享文件夾設置軟件、文件共享服務器軟件和共享文件夾加密工具的選擇,需要的朋友可以參考下2015-12-12