一、準備機器
所有節點執行
準備3臺虛擬機(2核4G,CentOS 7+),配置如下:
hostnamectl set-hostname k8s-master # 在Master節點執行
hostnamectl set-hostname k8s-node1 # Worker1節點執行
hostnamectl set-hostname k8s-node2 # Worker2節點執行
IP地址 | 主機名 | 角色 |
---|---|---|
192.168.11.101 | k8s-master | Master |
192.168.11.102 | k8s-node1 | Node |
192.168.11.103 | k8s-node2 | Node |
二、安裝Docker
所有節點執行以下命令:
# 卸載舊版本Docker
sudo yum remove docker\*# 安裝依賴工具
sudo yum install -y yum-utils# 配置阿里云Docker鏡像源
sudo yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安裝指定版本Docker
sudo yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6# 啟動Docker并設置開機自啟
systemctl enable docker --now# 配置Docker鏡像加速和參數
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://registry.docker-cn.com","https://mirror.ccs.tencentyun.com","https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://docker.1ms.run","https://hub.rat.dev","https://docker.1panel.live"]
}
EOF# 重啟Docker生效
sudo systemctl daemon-reload
sudo systemctl restart docker
三、安裝Kubernetes基礎環境
所有節點執行以下操作:
# 1. 關閉防火墻
systemctl stop firewalld
systemctl disable firewalld# 2. 關閉SELinux
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config# 3. 關閉Swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
systemctl reboot # 重啟生效# 4. 設置主機名(分別在每臺機器執行,上面執行過就不用執行了)
# Master節點執行:
hostnamectl set-hostname k8s-master
# Node1節點執行:
hostnamectl set-hostname k8s-node1
# Node2節點執行:
hostnamectl set-hostname k8s-node2# 5. 配置Hosts(所有節點添加以下內容)
cat >> /etc/hosts << EOF
192.168.11.101 k8s-master
192.168.11.102 k8s-node1
192.168.11.103 k8s-node2
EOF# 6. 允許iptables檢查橋接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system# 7. 時間同步
yum install ntpdate -y
ntpdate time.windows.com
四、安裝kubelet、kubeadm、kubectl
所有節點執行:
# 配置阿里云Kubernetes鏡像源
cat <<EOF | sudo tee /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
EOF# 卸載舊版本(如存在)
yum remove -y kubelet kubeadm kubectl#查看可以安裝的版本
yum list kubelet --showduplicates | sort -r# 安裝指定版本組件
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9# 啟動kubelet并設置開機自啟
sudo systemctl enable --now kubelet
五、初始化Master節點
僅在Master節點(k8s-master)執行:
# 1. 下載所需鏡像
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(kube-apiserver:v1.20.9kube-proxy:v1.20.9kube-controller-manager:v1.20.9kube-scheduler:v1.20.9coredns:1.7.0etcd:3.4.13-0pause:3.2
)
for imageName in ${images[@]} ; dodocker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOFchmod +x ./images.sh && ./images.sh# 2. 初始化Master節點 (里面的第一個ip地址就是k8s-master機器的ip,改成你自己機器的,后面兩個ip網段不用動)
#所有網絡范圍不重疊
kubeadm init \--apiserver-advertise-address=192.168.157.148 \--control-plane-endpoint=k8s-master \--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \--kubernetes-version v1.20.9 \--service-cidr=10.96.0.0/16 \--pod-network-cidr=10.244.0.0/16# 可以查看kubelet日志
journalctl -xefu kubelet #如果初始化失敗,重置kubeadm
kubeadm reset
rm -rf /etc/cni/net.d $HOME/.kube/config
#清理 iptables 規則
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPTmaster成功后提示如下:
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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou 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/You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:kubeadm join k8s-master:6443 --token 50rexj.yb0ys92ynnxxbo2s \--discovery-token-ca-cert-hash sha256:10fd9d2a9f4e2d7dff502aa3fb31a80f0372666efc92defde3707b499ba000e9 \--control-plane Then you can join any number of worker nodes by running the following on each as root:kubeadm join k8s-master:6443 --token 50rexj.yb0ys92ynnxxbo2s \--discovery-token-ca-cert-hash sha256:10fd9d2a9f4e2d7dff502aa3fb31a80f0372666efc92defde3707b499ba000e9# 3. 配置使用 kubectl 命令工具和kubectl權限
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
六、Master(Node)節點加入集群
僅在Master(Node)節點(k8s-node1、k8s-node2)執行:
kubeadm join k8s-master:6443 \--token 50rexj.yb0ys92ynnxxbo2s \--discovery-token-ca-cert-hash sha256:10fd9d2a9f4e2d7dff502aa3fb31a80f0372666efc92defde3707b499ba000e9
如果上面這個kubeadm join k8s……命令忘記了,可以使用“kubeadm token create --print-join-command”在master上重新生成。
若Node節點執行kubectl
報錯,需配置環境變量:
echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> /etc/profile
source /etc/profile
node節點添加成功后,可以驗證。
提示2個是0/1
提示2個是no……
主要是因為你的calico網絡還沒安裝,只要第2個命令目前能看到3個節點就沒問題。
[root@k8s-master calico]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-74f56488c5-4z9ds 0/1 Running 1 (23h ago) 23h #有2個是0
coredns-6554b8b87f-ttq5c 0/1 Running 1 (24m ago) 5d8h #有2個是0,具體那兩個忘記了
coredns-6554b8b87f-wgsqn 0/1 Running 1 (24m ago) 5d8h
etcd-k8s-master 1/1 Running 1 (24m ago) 5d8h
kube-apiserver-k8s-master 1/1 Running 1 (24m ago) 5d8h
kube-controller-manager-k8s-master 1/1 Running 1 (24m ago) 5d8h
kube-proxy-cxhjm 1/1 Running 1 (23m ago) 5d8h
kube-proxy-lvtxh 1/1 Running 1 (24m ago) 5d8h
kube-proxy-sbc94 1/1 Running 1 (24m ago) 5d8h
kube-scheduler-k8s-master 1/1 Running 1 (24m ago) 5d8h
[root@k8s-master calico]#
[root@k8s-master calico]#
[root@k8s-master calico]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master noReady control-plane 5d8h v1.28.2 #noready,提示no……
k8s-node1 noReady <none> 5d8h v1.28.2 #noready,提示no……
k8s-node2 noReady <none> 5d8h v1.28.2 #noready,提示no……
[root@k8s-master calico]#
?七、安裝calico網絡插件
# 1. 安裝Calico網絡插件
curl https://docs.projectcalico.org/archive/v3.20/manifests/calico.yaml -O #作廢
curl -LO https://docs.projectcalico.org/archive/v3.20/manifests/calico.yaml #作廢mkdir /root/calico && cd /root/calico/wget https://jiangstudy.online:8081/sources/calico.yaml修改calici.yaml的網絡 ##這一步很重要,否則網絡安裝成功集群也不通vi /root/calico/calico.yaml- name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16"#修改這個ip信息,這個ip信息和你# 2. 初始化Master節點的 --pod-network-cidr值保持一致#部署calico
kubectl apply -f calico.yaml
七、驗證集群狀態
僅在Master節點執行:
kubectl get nodes
輸出應顯示所有節點狀態為 Ready
。以及執行kubectl get pod -A時,都是1/1。
說明(不看也行,寫的不全):
-
Master節點獨有操作
-
初始化集群 (
kubeadm init
) -
安裝Calico網絡插件
-
執行
kubectl
命令查看集群狀態
-
-
Node節點獨有操作
-
使用
kubeadm join
加入集群 -
配置
KUBECONFIG
環境變量
-
-
所有節點共同操作
-
Docker安裝與配置
-
基礎環境配置(防火墻、SELinux、Swap等)
-
安裝kubelet/kubeadm/kubectl
通過以上步驟,可清晰區分Master與Node節點的操作范圍,確保集群順利搭建。
?
-
遇到的問題:
問題1、執行5.4的時候“安裝Calico網絡插件”,無法下載這個網絡文件。
后來使用的下載方法:wget https://jiangstudy.online:8081/sources/calico.yaml,然后一定要配置里面的ip。