目錄
- 1. 準備作業
- 1.1 決議主機名
- 1.2 同步時間
- 1.3 關閉防火墻
- 1.4 禁用selinux
- 1.5 禁用swap磁區
- 1.6 配置網橋轉發
- 1.7 配置ipvs功能
- 2. 安裝Docker
- 3. 安裝Node組件
- 4. 配置Master服務
- 5. 加入Node節點
- 6. 部署CNI網路組件
- 7. 測驗Nginx服務
- 總結
- 參考資料
1. 準備作業
所有集群節點都進行配置,服務器環境如下:
- 虛擬機:
VMware Fusion12.1.2; - 作業系統:
CentOS7.6.18; - 系統內核:
5.4.173-1.el7.elrepo.x86_64
| 主機名 | IP地址 | 配置 |
|---|---|---|
| k8s-master | 10.0.0.11 | 2核2G |
| K8s-node1 | 10.0.0.12 | 1核1G |
| K8s-node2 | 10.0.0.13 | 1核1G |
1.1 決議主機名
在每個集群節點中的hosts中加入主機名映射:
cat <<EOF >> /etc/hosts
10.0.0.11 k8s-master # K8s主節點
10.0.0.12 k8s-node1 # K8s從節點
10.0.0.13 k8s-node2 # K8s從節點
EOF
分別修改主機名:
hostnamectl set-hostname k8s-master # 在master上執行
hostnamectl set-hostname k8s-node1 # 在node1上執行
hostnamectl set-hostname k8s-node2 # 在node2上執行
1.2 同步時間
# 設定時區
timedatectl set-timezone Asia/Shanghai
timedatectl
# 安裝chrony同步工具
yum makecache fast
yum -y install chrony
systemctl start chroynd
systemctl enable --now chronyd
# 強制同步時間
chronyc -a makestep
date
1.3 關閉防火墻
關閉firewalld或iptables服務
# firewalld
systemctl stop firewalld
systemctl disable firewallld
# iptables
systemctl stop iptables
systemctl disable iptables
1.4 禁用selinux
selinux是linux系統下的一個安全服務,可能引發一些問題
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
1.5 禁用swap磁區
Kubernetes v1.8+要求關閉系統 Swap,Swap指虛擬記憶體磁區
# 注釋swap相關的行
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
swapoff -a
sysctl -w vm.swappiness=0
1.6 配置網橋轉發
將橋接的IPv4流量傳遞到iptables的鏈
cat <<EOF >/etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 重新加載
sysctl --system
# 加載過濾模塊
modprobe br_netfilter
# 查看是否成功
lsmod | grep br_netfilter
1.7 配置ipvs功能
在K8s中kube-proxy有iptables和ipvs兩種代理模型,ipvs性能較高,但需要手動載入ipset和ipvsadm模塊
# ?? 系統內核為4.19+時,執行此操作
yum install -y ipset ipvsadm
cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
lsmod|grep -e ip_vs -e nf_conntrack
# ?? 系統內核低于4.19,執行此操作
yum install -y ipset ipvsadm
cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
nf_conntrack
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
lsmod|grep -e ip_vs -e nf_conntrack_ipv4
# 最后重啟服務器
reboot
2. 安裝Docker
docker是K8s集群的基礎服務組件,需在每個集群節點上安裝docker服務,安裝流程可參考Docker安裝教程,
K8s推薦的Cgroup是
systemd, 修改Docker的Cgroup Driver:
# 查看docker的Cgroup Driver,默認為cgroupfs
docker info|grep Cgroup
# 修改Cgroup,若daemon.json不存在,則手動創建
cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
# 重啟服務
systemctl daemon-reload
systemctl restart docker
3. 安裝Node組件
在所有服務節點上安裝kubeadm, kubelet和kubectl
# 配置阿里云yum倉庫
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 查看可用的版本
yum list kubectl --showduplicates
# 注意??:如果僅安裝kubeadm,則會自動安裝最新版本kubelet和kubectl
yum -y install kubeadm-1.22.6 kubelet-1.22.6 kubectl-1.22.6
# 注意??:將添加到啟動項,無需啟動
systemctl enable kubelet
systemctl status kubelet
# 查看版本
kubeadm version
kubectl version
kubelet --version
修改kubelet的Cgroup:
# 修改kubelet的Cgroup
cat <<EOF > /etc/sysconfig/kubelet
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
EOF
4. 配置Master服務
# 查看kubeadm使用的鏡像
kubeadm config images list
# 可預先拉取鏡像,或下一步init時自動拉取
# kubeadm config images pull
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
# 注意??:只需修改第一項的IP,其余不用動
kubeadm init \
--apiserver-advertise-address=10.0.0.11 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.22.6 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
# ?? 此時,會得到「kubeadm join」的token資訊??????
# 使用kubectl工具
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
5. 加入Node節點
在Node節點執行kubeadm join命令,將node加入集群,
# 在master節點獲取token,同「kubeadm init」得到的token資訊
kubeadm token create --print-join-command --ttl 0
kubeadm join 10.0.0.11:6443 --token 05mmas.1kl...dz --discovery-token-ca-cert-hash sha256:16752bf...9c1e2f3c6
6. 部署CNI網路組件
Kubernetes支持多種網路插件,如 flannel、calico、canal等,這里選擇使用「flannel」
# master上操作
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 查看pods節點資訊(所有節點的狀態為:Running,說明正常)
kubectl get pods -n kube-system
kubectl get nodes
查看集群健康狀態:
kubectl get cs
kubectl cluster-info
7. 測驗Nginx服務
[root@k8s-master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
[root@k8s-master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
[root@k8s-master ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-6799fc88d8-6nl9d 0/1 ContainerCreating 0 4s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 48m
service/nginx NodePort 10.97.165.25 <none> 80:31080/TCP 4s
# 也可以修改服務配置
[root@k8s-master ~]# export KUBE_EDITOR="vim"
[root@k8s-master ~]# kubectl edit svc nginx
訪問任意節點上Nginx的Web服務,都會看到熟悉的Welcome to nginx! 頁面!
http://10.0.0.11:31080/
http://10.0.0.12:31080/
http://10.0.0.13:31080/
總結
- 安裝例外,可執行
journalctl -xefu kubelet查看日志 - master推薦最小配置為1核心2G,否則會出現以下錯誤!
[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
[ERROR Mem]: the system RAM (947 MB) is less than the minimum 1700 MB
- 必須配置hostname和hosts,且名稱必須對應一致,
[WARNING Hostname]: hostname "XXX" could not be reached
[WARNING Hostname]: hostname "XXX": lookup vm02 on 114.114.114.114:53: no such host
參考資料
The Times 03/Jan/2009 Chancellor on brink of second bailout for bankshttps://huangzhongde.cn/istio/Chapter2/Chapter2-4.html
https://www.cnblogs.com/xuweiweiwoaini/p/13884112.html
https://gitee.com/ylp657/kubernetes/tree/master#kubernetes
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/428512.html
標籤:其他
