欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

kubernetes使用kubeadm創(chuàng)建集群實操教程(全)

 更新時間:2024年06月29日 10:55:04   作者:STRANGEX-03  
安裝kubernetes的方式,分別是kubeadm引導集群、kOps、Kubespray,本文采用kubeadm引導集群的方式,主要運用了安裝kubeadm、對kubeadm進行故障排查、使用kubeadm創(chuàng)建集群,目標是要安裝單個控制平面的Kubernetes集群,在集群上安裝Pod網(wǎng)絡,以便Pod可以相互連通

根據(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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論