亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

根據(jù)官方文檔,總共有三種使用部署工具安裝kubernetes的方式,分別是使用kubeadm 引導(dǎo)集群、使用kOps安裝 Kubernetes、使用Kubespray安裝 Kubernetes。

在本次部署設(shè)計(jì)中,采用kubeadm引導(dǎo)集群的方式,主要運(yùn)用了安裝kubeadm、對kubeadm進(jìn)行故障排查、使用kubeadm創(chuàng)建集群。目標(biāo)是要安裝單個(gè)控制平面的Kubernetes集群,在集群上安裝Pod網(wǎng)絡(luò),以便Pod可以相互連通。

一、虛擬機(jī)準(zhǔn)備

準(zhǔn)備三臺(tái)預(yù)先安裝docker、cri-docker環(huán)境、kubernetes組件、cri-docker環(huán)境的虛擬機(jī)。

(一)主機(jī)基本配置

創(chuàng)建虛擬機(jī),根據(jù)官方文檔,本次實(shí)驗(yàn)在CentOS 8環(huán)境下進(jìn)行,主機(jī)內(nèi)存設(shè)置4GB,處理器個(gè)數(shù)為4,采用NAT網(wǎng)絡(luò)適配器。

(二)安裝docker

詳細(xì)安裝過程:CentOS 8:在Linux環(huán)境下安裝和卸載Docker

1. 安裝docker

yum install -y
yum-utils device-mapper-persistent-data lvm2

2. 設(shè)置阿里云源

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. 設(shè)置docker開機(jī)自動(dòng)啟動(dòng)

systemctl enable docker

(三)配置cri-docker環(huán)境

1. 提前下載cri-docker環(huán)境拖入虛擬機(jī),解壓縮并移動(dòng)到指定位置

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文件內(nèi)容

[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文件內(nèi)容

[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. 啟動(dòng)cri-docker服務(wù)

systemctl daemon-reload
systemctl start cri-dockerd.service
systemctl enable cri-dockerd.service

(四)安裝kubeadm、kubelet、kubectl

kubeadm:用來初始化集群的指令。

kubelet:在集群中的每個(gè)節(jié)點(diǎn)上用來啟動(dòng) Pod 和容器等。

kubectl:用來與集群通信的命令行工具。

1. 配置kubernetes的yum源

vim /etc/yum.repos.d/kubernetes.repo
# kubernetes.repo文件內(nèi)容

[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. 設(shè)置kubectl開機(jī)自動(dòng)啟動(dòng)

systemctl enable kubectl

(五)克隆主機(jī)

1. 進(jìn)入克隆虛擬機(jī)向?qū)?,選擇創(chuàng)建完整克隆

2. 根據(jù)需要為克隆主機(jī)重命名,修改存儲(chǔ)位置


二、環(huán)境配置工作

在三臺(tái)主機(jī)中均要進(jìn)行如下的環(huán)境配置工作

(一)修改主機(jī)名

對三臺(tái)主機(jī)分別修改主機(jī)名

hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2

(二)編輯hosts文件

1. 查看主機(jī)ip地址

ifconfig

2. 編輯/etc/hosts文件

vim /etc/hosts
# /etc/hosts文件內(nèi)容

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

(三)關(guān)閉防火墻、selinux、swap

1. 關(guān)閉防火墻

避免后續(xù)需要配置開放端口

systemctl stop firewalld.service
systemctl disable firewalld.service

2. 關(guān)閉selinux

selinux會(huì)限制容器對宿主機(jī)文件系統(tǒng)和系統(tǒng)資源的訪問權(quán)限

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

3. 關(guān)閉swap分區(qū),編輯/etc/fstab文件

kubelet要求必須禁用交換分區(qū),kubeadm初始化時(shí)會(huì)檢測swap是否關(guān)閉

vim /etc/fstab

修改/etc/fstab文件內(nèi)容,注釋swap行

# /etc/fstab文件內(nèi)容(局部)

# /dev/mapper/cl-swap     none                    swap    defaults        0 0

(四)配置同步時(shí)間、系統(tǒng)模塊

1. 設(shè)置本地時(shí)區(qū),加載RTC設(shè)置

確保集群中的各個(gè)組件在進(jìn)行各種操作時(shí)具有一致的時(shí)間戳

timedatectl set-local-rtc 0
timedatectl set-timezone Asia/Shanghai
hwclock –systohc

2. 加載和檢查系統(tǒng)模塊

確保Kubernetes網(wǎng)絡(luò)和容器的正常運(yùn)行

modprobe br_netfilter
lsmod | grep br_netfilter

(五)配置SSH免密登錄

配置Kubernetes集群需要在不同的節(jié)點(diǎn)之間進(jìn)行通信和操作,配置SSH免密登錄能夠簡化操作,避免每次執(zhí)行操作都需要手動(dòng)輸入密碼。

1. 生成新的密鑰對

ssh-keygen

2. 將公鑰復(fù)制到目標(biāo)主機(jī)

ssh-copy-id root@master
ssh-copy-id root@slave1
ssh-copy-id root@slave2

3. 檢驗(yàn)配置結(jié)果

ssh root@master
ssh root@slave1
ssh root@slave2

三、準(zhǔn)備容器所需的鏡像

由于無法訪問外網(wǎng),不能下載存放在registry.k8s.io上的默認(rèn)容器鏡像,這里選擇在阿里云上進(jìn)行拉取鏡像,然后使用tag命令修改為它需求的鏡像標(biāo)簽,以下操作在三臺(tái)主機(jī)中都要進(jìn)行。

(一)查看所需鏡像文件

查看Kubernetes集群需要的鏡像

kubeadm config images list

(二)配置daemon.json文件

1. 在阿里云中啟用鏡像加速器

2. 配置/etc/docker/daemon.json文件

在阿里云操作文檔的基礎(chǔ)上添加驅(qū)動(dòng)命令修改docker的驅(qū)動(dòng)為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

(四)修改鏡像標(biāo)簽

使用tag修改為需求的鏡像標(biāo)簽

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

(五)查看鏡像結(jié)果

查看本地鏡像,確認(rèn)是否有需要的鏡像

docker images

四、具體節(jié)點(diǎn)配置

(一)初始化Kubernetes集群

1. 在主節(jié)點(diǎn)執(zhí)行初始化的命令

apiserver-advertise-address用來指定API服務(wù)器的廣播地址。

kubernetes-version指定要安裝的Kubernetes版本。

service-cidr指定服務(wù)網(wǎng)絡(luò)的CIDR范圍。

pod-network-cidr指定Pod網(wǎng)絡(luò)的CIDR范圍。

ignore-preflight-errors=all忽略所有預(yù)檢錯(cuò)誤。

cri-socket指定容器運(yùn)行時(shí)的UNIX套接字路徑。

另外,由于前一步驟已經(jīng)安裝了集群所需的鏡像,在命令進(jìn)行時(shí)會(huì)提示鏡像已存在而不再拉取,故也不再需要設(shè)置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

如果報(bào)錯(cuò)則輸入下面命令恢復(fù)原有狀態(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,于是臨時(shí)改用containerd,重新在containerd拉取鏡像和改標(biāo)簽,但在使用中仍有bug無法解決。于是選擇安裝cri-dockerd再次進(jìn)行以上命令,執(zhí)行成功。

2. 初始化成功顯示以下內(nèi)容

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

初始化成功后虛擬機(jī)卡頓嚴(yán)重,通過關(guān)閉后提高處理器、內(nèi)存等配置得以緩解

3. 根據(jù)提示運(yùn)行kubectl

我使用root用戶,可以直接設(shè)置KUBECONFIG環(huán)境變量,可以讓kubectl命令行工具自動(dòng)找到并使用這個(gè)配置文件

export KUBECONFIG=/etc/kubernetes/admin.conf

(二)部署Pod網(wǎng)絡(luò)

部署Pod網(wǎng)絡(luò)是為了提供容器間和跨節(jié)點(diǎn)的網(wǎng)絡(luò)通信,實(shí)現(xiàn)網(wǎng)絡(luò)策略和安全性,支持服務(wù)發(fā)現(xiàn)和負(fù)載均衡

1. 進(jìn)入提示的網(wǎng)站,選擇flannel網(wǎng)絡(luò)組件

2. 安裝CNI網(wǎng)絡(luò)插件

根據(jù)網(wǎng)站內(nèi)提示,F(xiàn)lannel默認(rèn)用作 CNI 網(wǎng)絡(luò)插件,部署Flannel時(shí)需確保CNI網(wǎng)絡(luò)插件有安裝,由于國內(nèi)訪問Github不穩(wěn)定,這里提前下載好插件,拖入虛擬機(jī)的主目錄,再進(jì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)站內(nèi)提示,提前下載好yml文件,拖入虛擬機(jī)的主目錄,再輸入命令

kubectl apply -f kube-flannel.yml

(三)加入子節(jié)點(diǎn)

1. 在主節(jié)點(diǎn)中將kubeconfig環(huán)境變量分發(fā)到子節(jié)點(diǎn)

kubeconfig環(huán)境變量指定了kubectl命令使用的kubeconfig文件的路徑,該文件包含了連接到集群所需的認(rèn)證和配置信息,讓子節(jié)點(diǎn)上的kubectl命令能夠連接到Kubernetes集群的控制平面

scp /etc/kubernetes/admin.conf slave1:/etc/kubernetes/
scp /etc/kubernetes/admin.conf slave2:/etc/kubernetes/

設(shè)計(jì)結(jié)束后,在官方安裝文檔上注意到其實(shí)建議不要將admin.conf文件與任何人共享,應(yīng)該使用kubeadm kubeconfig user命令為其他用戶生成 kubeconfig文件

2. 在兩個(gè)node節(jié)點(diǎn)中輸入以下命令

由于同時(shí)有containerd和docker,在提示的命令基礎(chǔ)上加了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

報(bào)錯(cuò)則輸入下面命令恢復(fù)原有狀態(tài),再根據(jù)報(bào)錯(cuò)提示進(jìn)行調(diào)整

rm -rf /etc/kubernetes/kubelet.conf
rm -rf /etc/kubernetes/pki/ca.crt
systemctl restart kubelet

(四)確保節(jié)點(diǎn)Ready狀態(tài)

1. 查看節(jié)點(diǎn)狀態(tài)

kubectl get nodes

2. 顯示NotReady,需要修改yml文件

原因是pod之間無法ping通,需要讓flanneld包發(fā)到指定網(wǎng)卡,數(shù)據(jù)包才能正常的經(jīng)過flannel進(jìn)行傳送

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)建一個(gè)nginx鏡像,向Kubernetes集群提交一個(gè)Pod創(chuàng)建的請求,控制平面會(huì)根據(jù)集群的配置和調(diào)度策略,在可用的節(jié)點(diǎn)上選擇一個(gè)節(jié)點(diǎn)來運(yùn)行這個(gè)Pod。

kubectl create deployment mynginx --image=nginx

(二)暴露端口

創(chuàng)建一個(gè)Service資源,并將其關(guān)聯(lián)到mynginx Pod,將其與集群的外部網(wǎng)絡(luò)連接起來,指定Service的端口為80,并使用NodePort類型,NodePort類型會(huì)在每個(gè)節(jié)點(diǎn)上選擇一個(gè)端口,將外部流量轉(zhuǎn)發(fā)到Service的端口上。

kubectl expose deployment mynginx --port=80 --type=NodePort

(三)訪問nginx

通過瀏覽器訪問任一節(jié)點(diǎn)的IP地址和暴露的NodePort端口,可以訪問到nginx服務(wù),說明測試成功

192.168.211.136:30619

192.168.211.138:30619

六、總結(jié)

到此這篇關(guān)于kubernetes使用kubeadm創(chuàng)建集群實(shí)操教程(全) 的文章就介紹到這了,更多相關(guān)kubernetes使用kubeadm創(chuàng)建集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論