目錄
一、實(shí)驗(yàn)
1.環(huán)境
2.K8S master節(jié)點(diǎn)環(huán)境準(zhǔn)備
3.K8S master節(jié)點(diǎn)安裝kubelet、kubeadm、kubectl
3.K8S node節(jié)點(diǎn)環(huán)境準(zhǔn)備與軟件安裝
4.K8S master節(jié)點(diǎn)部署服務(wù)
5.K8S node節(jié)點(diǎn)部署
6.K8S master節(jié)點(diǎn)查看集群
7.容器網(wǎng)絡(luò)(CNI)部署
8.K8S 集群測試
二、問題
1.calico生成資源報(bào)錯(cuò)
2.為何要安裝docker和ci-dockerd
一、實(shí)驗(yàn)
1.環(huán)境
(1)主機(jī)
表1 主機(jī)
主機(jī) | 架構(gòu) | 版本 | IP | 備注 |
master | K8S master節(jié)點(diǎn) | 1.29.0 | 192.168.204.8 | |
node1 | K8S node節(jié)點(diǎn) | 1.29.0 | 192.168.204.9 | |
node2 | K8S node節(jié)點(diǎn) | 1.29.0 | 192.168.204.10 |
2.K8S master節(jié)點(diǎn)環(huán)境準(zhǔn)備
(1)查看內(nèi)核
uname -rs
(2)主機(jī)名配置
hostnamectl set-hostname master && bash
(3)主機(jī)名與IP解析
cat >> /etc/hosts << EOF
192.168.204.8 master
192.168.204.9 node01
192.168.204.10 node02
EOF
(4)關(guān)閉防火墻與SELINUX
1)關(guān)閉防火墻
systemctl stop firewalld
systemctl disable firewalld
2)關(guān)閉selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
(5)時(shí)間同步配置
yum install chrony -y
systemctl start chronyd && systemctl enable chronyd && chronyc sources
① 安裝
② 開機(jī)自啟動(dòng)服務(wù)
(6)配置內(nèi)核路由轉(zhuǎn)發(fā)及網(wǎng)橋過濾
1)配置
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
vm.swappiness=0
EOF
2)查看
sysctl --system
3)加載br_netfilter模塊
modprobe br_netfilter
lsmod |grep br_netfilter
①配置
② ?查看
③ 加載br_netfilter模塊
(7)配置ipvs轉(zhuǎn)發(fā)
1)安裝
yum -y install ipset ipvsadm
2)配置ipvsadm模塊加載方式
# 添加需要加載的模塊
mkdir -p /etc/sysconfig/ipvsadm
cat > /etc/sysconfig/ipvsadm/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
3)授權(quán)、運(yùn)行、檢查是否加載
chmod 755 /etc/sysconfig/ipvsadm/ipvs.modules && bash /etc/sysconfig/ipvsadm/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
① 安裝
② 配置
(8)關(guān)閉swap分區(qū)
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a
grep swap /etc/fstab
3.K8S master節(jié)點(diǎn)安裝kubelet、kubeadm、kubectl
(1)安裝docker
① 阿里云鏡像加速將XXXXXXXX改為自己的即可(?"https://XXXXXXXX.mirror.aliyuncs.com",)
1)安裝
yum -y install wget && wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
2)配置cgroup驅(qū)動(dòng)及鏡像下載加速器:
cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://XXXXXXXX.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://dockerhub.azk8s.cn",
"http://hub-mirror.c.163.com"
]
}
EOF
3)自啟動(dòng)
systemctl enable docker && systemctl start docker && systemctl status docker && docker info|grep systemd
② 安裝docker
③ 配置鏡像加速
④ 開機(jī)自啟動(dòng)服務(wù)
(2)安裝ci-dockerd
1)下載安裝最新版的cri-dockerd
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8.amd64.tgz
tar xf cri-dockerd-0.3.8.amd64.tgz
mv cri-dockerd/cri-dockerd /usr/bin/
rm -rf cri-dockerd cri-dockerd-0.3.8.amd64.tgz
2)配置啟動(dòng)項(xiàng)
cat > /etc/systemd/system/cri-docker.service<<EOF
[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
Requires=cri-docker.socket
[Service]
Type=notify
# ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://
# 指定用作 Pod 的基礎(chǔ)容器的容器鏡像(“pause 鏡像”)
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.k8s.io/pause:3.9 --container-runtime-endpoint fd://
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
EOF
cat > /etc/systemd/system/cri-docker.socket <<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
3)重新加載并設(shè)置自啟動(dòng)
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker && systemctl status cri-docker
① 解壓
② 移動(dòng)
③ 配置啟動(dòng)項(xiàng)
④ 重啟并設(shè)置開機(jī)自啟服務(wù)
(3)安裝kubelet、kubeadm、kubectl
1)配置k8s源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
# exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
2)安裝
yum install -y kubelet kubeadm kubectl
3)配置 cgroup 驅(qū)動(dòng)與docker一致
cp /etc/sysconfig/kubelet{,.bak}
cat > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF
systemctl enable kubelet
4)安裝自動(dòng)補(bǔ)全工具(可選)
yum install bash-completion -y
source /usr/share/bash-completion/bash_completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
5)查看配置鏡像
kubeadm config images list
6)下載k8s配置鏡像和Calico網(wǎng)絡(luò)配置鏡像
wget http://mirrors.oby.ink/docker-images/k8s-1.29.0.tar
wget http://mirrors.oby.ink/docker-images/k8s-calico-3.27.0.tar
7)導(dǎo)入k8s配置鏡像和Calico網(wǎng)絡(luò)配置鏡像
docker load -i k8s-1.29.0.tar
docker load -i k8s-calico-3.27.0.tar
8)所有需要用到鏡像:
docker images
①配置k8s源
② 安裝
③ 配置 cgroup 驅(qū)動(dòng)與docker一致
④ 安裝自動(dòng)補(bǔ)全工具
⑤ 申明環(huán)境變量
⑥ 查看配置鏡像
⑦導(dǎo)入k8s配置鏡像鏡像
⑧導(dǎo)入Calico網(wǎng)絡(luò)配置鏡像
⑨查看鏡像
3.K8S node節(jié)點(diǎn)環(huán)境準(zhǔn)備與軟件安裝
(1)配置與安裝
① 注意主機(jī)名修改為不同的名稱
hostnamectl set-hostname node1 && bash
hostnamectl set-hostname node2 && bash
②查看內(nèi)核
uname -rs
(2)測試時(shí)間同步
date
① master節(jié)點(diǎn)
② node1節(jié)點(diǎn)
③node2節(jié)點(diǎn)
(3)其他過程
與master節(jié)點(diǎn)相同,此處省略
4.K8S master節(jié)點(diǎn)部署服務(wù)
(1)初始化
1)初始化集群
kubeadm init \
--apiserver-advertise-address 192.168.204.8 \
--kubernetes-version v1.29.0 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock
(2) 配置
1) 創(chuàng)建配置目錄
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2)默認(rèn)初始化生成token有效期是24小時(shí),所以用自己的生成不過期的token,node節(jié)點(diǎn)加入需要用到
kubeadm token create --ttl 0 --print-join-command
3) 生成結(jié)果如下
kubeadm join 192.168.204.8:6443 --token 4n321n.czak0y1fhvbfzjcq --discovery-token-ca-cert-hash sha256:e375cebe793b83f64a68b5c0aab56ae578b0989af989897324241e22d7738fca
5.K8S node節(jié)點(diǎn)部署
(1)加入集群
1)添加節(jié)點(diǎn)需要指定cri-dockerd接口–cri-socket ,這里是使用cri-dockerd
kubeadm join 192.168.204.8:6443 --token 4n321n.czak0y1fhvbfzjcq --discovery-token-ca-cert-hash sha256:e375cebe793b83f64a68b5c0aab56ae578b0989af989897324241e22d7738fca --cri-socket=unix:///var/run/cri-dockerd.sock
2)如果是containerd則使用–cri-socket unix:///run/containerd/containerd.sock
① node1 節(jié)點(diǎn)
② node2節(jié)點(diǎn)
6.K8S master節(jié)點(diǎn)查看集群
(1)查看
1)查看node
kubectl get node
2)查看node詳細(xì)信息
kubectl get node -o wide
master節(jié)點(diǎn)查看(狀態(tài)為NotReady)
7.容器網(wǎng)絡(luò)(CNI)部署
(1)下載Calico配置文件
wget https://github.com/projectcalico/calico/blob/v3.27.0/manifests/calico.yaml
(2)改里面定義Pod網(wǎng)絡(luò)(CALICO_IPV4POOL_CIDR)
vim calico.yaml
① ?修改前:
②修改后:
與前面kubeadm init的 --pod-network-cidr指定的一樣
(3)部署
kubectl apply -f calico.yaml
(4)查看
kubectl get pods -n kube-system
(4) 查看pod(狀態(tài)已變更為Ready)
kubectl get node
8.K8S 集群測試
(1)創(chuàng)建deploymenty資源,指定鏡像為nginx,副本數(shù)量為2個(gè),暴露端口80類型為NodePort
kubectl create deployment web -r 2 --image=nginx
kubectl expose deployment web --port=80 --type=NodePort
(2)觀察資源生成情況
kubectl get deployment
kubectl get deployment -w
(3)查看pod
kubectl get pod
kubectl get pod -o wide
(4)查看service
kubectl get svc |grep web
32406端口是容器80映射到主機(jī)的端口
(5)網(wǎng)頁瀏覽測試
http://192.168.204.9:32406/
http://192.168.204.10:32406/
node1節(jié)點(diǎn)
node2節(jié)點(diǎn)
二、問題
1.calico生成資源報(bào)錯(cuò)
(1)報(bào)錯(cuò)
error: error parsing calico.yaml: error converting YAML to JSON: yaml: line 204: did not find expected '-' indicator
(2)原因分析
語法錯(cuò)誤,符號(hào)“-”縮進(jìn)錯(cuò)誤
(3)解決方法
修改配置文件。
修改前:
修改后:
成功:
2.為何要安裝docker和ci-dockerd
(1)文檔
K8S官網(wǎng)
容器運(yùn)行時(shí) | Kubernetes
docker安裝
docker-ce鏡像_docker-ce下載地址_docker-ce安裝教程-阿里巴巴開源鏡像站
cgroup驅(qū)動(dòng)
容器運(yùn)行時(shí) | Kubernetes
(2)k8s(v1.24版本以前)
使用docker-shim調(diào)用流程:kubelet(客戶端) -> docker shim -> dockerd -> containerd -> containerd-shim -> runc
(3)k8s(v1.24版本以后)
(4)解決方案文章來源:http://www.zghlxwxcb.cn/news/detail-790318.html
Kubernetes v1.24移除docker-shim的支持,而Docker Engine默認(rèn)又不支持CRI標(biāo)準(zhǔn),因此二者默認(rèn)無法再直接集成。為此,Mirantis和Docker聯(lián)合創(chuàng)建了cri-dockerd項(xiàng)目,用于為Docker Engine提供一個(gè)能夠支持到CRI規(guī)范的橋梁,從而能夠讓Docker作為Kubernetes容器引擎。
文章來源地址http://www.zghlxwxcb.cn/news/detail-790318.html
到了這里,關(guān)于云原生Kubernetes: Kubeadm部署K8S 1.29版本 單Master架構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!