記錄在剛搭建的3個(gè)虛擬機(jī)里成功安裝K8S1.25版本集群的步驟
由于是成功創(chuàng)建后才記錄的博客,只記錄了操作步驟,過程中執(zhí)行命令后的截圖會(huì)有部分缺失,或者換成了文字。
環(huán)境說明
實(shí)驗(yàn)環(huán)境規(guī)劃
操作系統(tǒng):centos7.9
每個(gè)服務(wù)器配置: 4Gib內(nèi)存/4vCPU/80G硬盤
網(wǎng)絡(luò):NAT模式
集群搭建規(guī)劃
K8S集群角色 | IP | 主機(jī)名 | 安裝的組件 |
---|---|---|---|
控制節(jié)點(diǎn) | 192.168.40.182 | k8s-master1 | apiserver、controller-manager、schedule、kubelet、etcd、kube-proxy、containerd、calico |
工作節(jié)點(diǎn) | 192.168.40.183 | k8s-node1 | Kube-proxy、calico、coredns、containerd、kubelet |
工作節(jié)點(diǎn) | 92.168.40.184 | k8s-node2 | Kube-proxy、calico、coredns、containerd、kubelet |
初始化安裝k8s集群的實(shí)驗(yàn)環(huán)境
安裝虛擬機(jī)
安裝虛擬機(jī)步驟見:
鏈接: Windows安裝配置VMware
主要是:
1、修改機(jī)器IP,變成靜態(tài)IP
2、關(guān)閉selinux
3、建議:自用的話,3個(gè)服務(wù)器root的登錄密碼設(shè)置一致,方面后面的操作
更新yum源和操作系統(tǒng)
ps. 3個(gè)服務(wù)器里都執(zhí)行
yum update -y
查看操作系統(tǒng)
cat /etc/redhat-release
執(zhí)行結(jié)果顯示:CentOS Linux release 7.9.2009 (Core)
配置機(jī)器主機(jī)名
在192.168.40.182上執(zhí)行
hostnamectl set-hostname k8s-master1 && bash
在192.168.40.183上執(zhí)行
hostnamectl set-hostname k8s-node1 && bash
在192.168.40.184上執(zhí)行
hostnamectl set-hostname k8s-node2 && bash
配置主機(jī)hosts文件,相互之間通過主機(jī)名互相訪問
修改每臺(tái)服務(wù)器的/etc/hosts文件,文件最后增加如下內(nèi)容:
ps. 文件里原有的配置不要?jiǎng)?/p>
192.168.40.182 k8s-master1
192.168.40.183 k8s-node1
192.168.40.184 k8s-node2
配置主機(jī)之間無密碼登錄
ps. 以下命令3個(gè)服務(wù)器里都執(zhí)行
1、配置到其他機(jī)器免密登錄
ssh-keygen
ps. 以上命令執(zhí)行后,一路回車,不輸入密碼
2、把本地生成的密鑰文件和私鑰文件拷貝到遠(yuǎn)程主機(jī)
ssh-copy-id k8s-master1
以上命令執(zhí)行后,輸入“yes”,然后按提示輸入k8s-master1服務(wù)器的登錄密碼
ssh-copy-id k8s-node1
以上命令執(zhí)行后,輸入“yes”,然后按提示輸入k8s-node1服務(wù)器的登錄密碼
ssh-copy-id k8s-node2
以上命令執(zhí)行后,輸入“yes”,然后按提示輸入k8s-node2服務(wù)器的登錄密碼
關(guān)閉交換分區(qū)swap,提升性能
ps. 以下命令3個(gè)服務(wù)器里都執(zhí)行
swapoff -a
永久關(guān)閉:注釋swap掛載,給swap這行開頭加一下注釋
vi /etc/fstab
為什么要關(guān)閉swap交換分區(qū)?
Swap是交換分區(qū),如果機(jī)器內(nèi)存不夠,會(huì)使用swap分區(qū),但是swap分區(qū)的性能較低,k8s設(shè)計(jì)的時(shí)候?yàn)榱四芴嵘阅?,默認(rèn)是不允許使用交換分區(qū)的。Kubeadm初始化的時(shí)候會(huì)檢測(cè)swap是否關(guān)閉,如果沒關(guān)閉,那就初始化失敗。如果不想要關(guān)閉交換分區(qū),安裝k8s的時(shí)候可以指定–ignore-preflight-errors=Swap來解決。
修改機(jī)器內(nèi)核參數(shù)
ps. 以下命令3個(gè)服務(wù)器里都執(zhí)行
modprobe br_netfilter
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf
關(guān)閉firewalld防火墻
ps. 3個(gè)服務(wù)器里都執(zhí)行
systemctl stop firewalld && systemctl disable firewalld
配置阿里云的repo源
ps. 以下命令3個(gè)服務(wù)器里都執(zhí)行
yum install yum-utils -y
配置國(guó)內(nèi)安裝docker和containerd的阿里云的repo源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
配置安裝k8s組件需要的阿里云的repo源
ps.以下命令 3個(gè)服務(wù)器里都執(zhí)行
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
配置時(shí)間同步
ps. 以下命令3個(gè)服務(wù)器里都執(zhí)行
安裝ntpdate命令
yum install ntpdate -y
跟網(wǎng)絡(luò)時(shí)間做同步
ntpdate cn.pool.ntp.org
把時(shí)間同步做成計(jì)劃任務(wù)
crontab -e
寫入:
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
重啟crond服務(wù)
service crond restart
安裝基礎(chǔ)軟件包
ps. 3個(gè)服務(wù)器里都執(zhí)行
yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm
安裝containerd服務(wù)
ps. 以下命令3個(gè)服務(wù)器里都執(zhí)行
yum install -y containerd.io-1.6.6
接下來生成 containerd 的配置文件
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
修改配置文件
vim /etc/containerd/config.toml
config.toml文件里的修改點(diǎn):
1、把SystemdCgroup = false 修改成 = true
2、把sandbox_image = “k8s.gcr.io/pause:3.6” 修改成=“registry.aliyuncs.com/google_containers/pause:3.7”
改后如圖(相關(guān)文件的片段,非整個(gè)文件的內(nèi)容):
配置 containerd 開機(jī)啟動(dòng),并啟動(dòng) containerd
systemctl enable containerd --now
修改/etc/crictl.yaml文件
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
systemctl restart containerd
安裝docker服務(wù)
docker跟containerd不沖突,安裝docker是為了能基于dockerfile構(gòu)建鏡像
ps. 以下命令3個(gè)服務(wù)器里都執(zhí)行
yum install docker-ce -y
systemctl enable docker --now
配置containerd、docker鏡像加速器
ps. 以下命令3個(gè)服務(wù)器里都執(zhí)行
vim /etc/containerd/config.toml
config.toml文件里的修改點(diǎn):找到config_path = “”,修改成
config_path = “/etc/containerd/certs.d”
mkdir /etc/containerd/certs.d/docker.io/ -p
vim /etc/containerd/certs.d/docker.io/hosts.toml
寫入如下內(nèi)容
[host."https://vh3bm52y.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
capabilities = ["pull"]
重啟containerd
systemctl restart containerd
配置docker鏡像加速器
vim /etc/docker/daemon.json
寫入如下內(nèi)容
{
"registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
}
ps. 也可以在服務(wù)器節(jié)點(diǎn)上配置好,再遠(yuǎn)程拷貝到其他服務(wù)節(jié)點(diǎn)上,如下在k8s-master節(jié)點(diǎn)上執(zhí)行:
scp daemon.json k8s-node1:/etc/docker/
scp daemon.json k8s-node2:/etc/docker/
重啟docker
systemctl restart docker
安裝初始化k8s需要的軟件包
ps. 以下命令3個(gè)服務(wù)器里都執(zhí)行
yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0
systemctl enable kubelet
注:每個(gè)軟件包的作用
- Kubeadm: kubeadm是一個(gè)工具,用來初始化k8s集群的
- kubelet: 安裝在集群所有節(jié)點(diǎn)上,用于啟動(dòng)Pod,kubeadm安裝k8s,控制節(jié)點(diǎn)和工作節(jié)點(diǎn)的組件
- kubectl: 通過kubectl可以部署和管理應(yīng)用,查看各種資源,創(chuàng)建、刪除和更新各種組件
kubeadm初始化k8s集群
ps. 僅在master節(jié)點(diǎn)的服務(wù)器上執(zhí)行
kubeadm config print init-defaults > kubeadm.yaml
通過kubeadm config print init-defaults命令生成kubeadm.yaml文件,根據(jù)自己的需求修改配置,比如修改 imageRepository的值,kube-proxy 的模式為ipvs,需要注意的是由于本次使用的containerd作為運(yùn)行時(shí),所以在初始化節(jié)點(diǎn)的時(shí)候需要指定cgroupDriver為systemd
vim kubeadm.yaml
修改配置文件,修改地方用#標(biāo)注了。僅改動(dòng)標(biāo)注部分,其他保持生成后的不變
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.40.182 #控制節(jié)點(diǎn)(master節(jié)點(diǎn))的ip
bindPort: 6443
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock #指定containerd容器運(yùn)行時(shí),/etc/crictl.yaml里的runtime-endpoint
imagePullPolicy: IfNotPresent
name: k8s-master1 #控制節(jié)點(diǎn)主機(jī)名
taints: null
---
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers # 指定阿里云鏡像倉庫地址
kind: ClusterConfiguration
kubernetesVersion: 1.25.0 #k8s版本
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16 # 新增加的配置,指定pod網(wǎng)段
serviceSubnet: 10.96.0.0/12 # 指定Service網(wǎng)段
scheduler: {}
#在文件最后,插入以下內(nèi)容,(復(fù)制時(shí),要帶著---)
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
基于kubeadm.yaml初始化k8s集群
k8s鏡像下載很慢有時(shí)候會(huì)失敗,提供了鏡像的壓縮文件,可以通過導(dǎo)入獲取鏡像。
文件放在了網(wǎng)盤里可自?。?/p>
鏈接: https://pan.baidu.com/s/1uDSPp1AkcvVxBzL57dWeBQ
提取碼: ixhg
以下命令3個(gè)服務(wù)器里都執(zhí)行
ctr -n=k8s.io images import k8s_1.25.0.tar.gz
k8s_1.25.0.tar.gz這個(gè)文件如何來的?
這個(gè)文件把安裝k8s需要的鏡像都集成好了,通過ctr images export 這個(gè)命令把鏡像輸出到k8s_1.25.0.tar.gz文件。
如: ctr -n=k8s.io images export k8s_1.25.tar.gz docker.io/calico/node:v3.18.0 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.9.3
以上多個(gè)鏡像用 空格 隔開
如果需安裝其他版本,那就不需要實(shí)現(xiàn)解壓鏡像,可以從網(wǎng)絡(luò)拉取鏡像即可
ctr是containerd自帶的工具,有命名空間的概念,若是k8s相關(guān)的鏡像,都默認(rèn)在k8s.io這個(gè)命名空間,所以導(dǎo)入鏡像時(shí)需要指定命令空間為k8s.io
查看鏡像
ctr -n=k8s.io images ls
ps. 僅在master節(jié)點(diǎn)的服務(wù)器上執(zhí)行
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification
看到類似返回表示執(zhí)行成功
配置kubectl的配置文件config,相當(dāng)于對(duì)kubectl進(jìn)行授權(quán),這樣kubectl命令可以使用這個(gè)證書對(duì)k8s集群進(jìn)行管理
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
擴(kuò)容k8s集群-添加第一個(gè)工作節(jié)點(diǎn)
在k8s-master1上查看加入節(jié)點(diǎn)的命令
kubeadm token create --print-join-command
獲取到返回的命令,我當(dāng)時(shí)的是:
kubeadm join 192.168.40.182:6443 --token pmm98c.whu5zvft6y1g1e2c --discovery-token-ca-cert-hash sha256:ff5a016ba790353d8d9cf2c46c3d6cbaeeba81c12503fb514f9a7f8ff17667c2
將返回的命令后面加上“–ignore-preflight-errors=SystemVerification” ,分別在node1和node2中執(zhí)行
我當(dāng)時(shí)執(zhí)行的是:
[root@k8s-node1~]# kubeadm join 192.168.40.180:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a --ignore-preflight-errors=SystemVerification
看到下面圖片響應(yīng)的,說明k8s-node1節(jié)點(diǎn)已經(jīng)加入到集群了,充當(dāng)工作節(jié)點(diǎn)了
在k8s-master1上執(zhí)行下面命令,查看集群節(jié)點(diǎn)狀況
kubectl get nodes
當(dāng)時(shí)返回的如圖:
對(duì)k8s-node1打個(gè)標(biāo)簽,顯示work
kubectl label nodes k8s-node1 node-role.kubernetes.io/work=work
kubectl label nodes k8s-node2 node-role.kubernetes.io/work=work
kubectl get nodes
為什么在工作節(jié)點(diǎn)運(yùn)行kubectl報(bào)錯(cuò)?
[root@k8s-node1 ~]# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
因?yàn)樵诠ぷ鞴?jié)點(diǎn)上沒有$HOME/.kube/config文件。
在工作節(jié)點(diǎn)上執(zhí)行kubectl的步驟如下:
分別在node1和node2中執(zhí)行
mkdir $HOME/.kube/
在master節(jié)點(diǎn)中執(zhí)行
scp /root/.kube/config k8s-node1:/root/.kube/
分別在node1和node2中執(zhí)行
kubectl get nodes
安裝kubernetes網(wǎng)絡(luò)組件-Calico
把安裝calico需要的鏡像calico.tar.gz(在上面提供的網(wǎng)盤里)傳到3個(gè)服務(wù)器上,上傳后執(zhí)行
ps. 以下命令3個(gè)服務(wù)器里都執(zhí)行
ctr -n=k8s.io images import calico.tar.gz
上傳calico.yaml(在上面提供的網(wǎng)盤里)到master節(jié)點(diǎn)上,使用yaml文件安裝calico 網(wǎng)絡(luò)插件
kubectl apply -f calico.yaml
注:在線下載配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml
以上安裝結(jié)束,最后的截圖如下:文章來源:http://www.zghlxwxcb.cn/news/detail-820739.html
kubectl get nodes
文章來源地址http://www.zghlxwxcb.cn/news/detail-820739.html
到了這里,關(guān)于Kubeadm安裝單master多node節(jié)點(diǎn)K8S集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!