Kubernetes集群安裝
虛擬機準備
按照三臺虛擬機標準,一臺控制節點兩臺工作節點
主機名 | ip | 配置要求 |
---|---|---|
master-k8s | 192.168.242.10 | 2GB或更多RAM,2個CPU或更多CPU,硬盤30GB或更多 |
node01-k8s | 192.168.242.11 | 2GB或更多RAM,2個CPU或更多CPU,硬盤30GB或更多 |
nide02-k8s | 192.168.242.12 | 2GB或更多RAM,2個CPU或更多CPU,硬盤30GB或更多 |
系統初始化配置(三臺節點相同)
關閉防火墻(不贅述)
關閉 selinux (不贅述)
關閉swap
swapoff -a # 臨時關閉vi /etc/fstab #永久關閉
注釋swap開機掛載行 sed -i 's/.swap./#&/' /etc/fstab
設置時間同步
yum install ntpdate -y
ntpdate us.pool.ntp.org
hwclock -w
每臺主機添加hosts:
cat >> /etc/hosts << EOF
192.168.242.10 master-k8s
192.168.242.11 node01-k8s
192.168.242.12 node02-k8s
EOF
到這里最好重啟一下系統
所有節點安裝Docker/kubeadm/kubelet/kubectl
安裝Docker(所有節點)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo# 看一下可用版本
yum list docker-ce --showduplicates |sort -r
# 安裝20版本的docker與客戶端
yum -y install docker-ce-20* docker-ce-cli-20*
# 設置docker自啟動
systemctl enable docker && systemctl start docker
docker --version
配置Docker加速鏡像
vi /etc/docker/daemon.json# 寫入以下格式的鏡像地址(可用鏡像需自行測試是否可用)
{ "registry-mirrors": ["https://docker.xuanyuan.me/"] }# 重啟docker
systemctl daemon-reload
systemctl restart docker# 查看生效的鏡像(如果生效,會列出生效的鏡像地址)
docker info | grep -i -A5 'Registry Mirrors'
安裝docker命令補全(可選)
yum install bash-completion -ycurl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-composesource /etc/bash_completion.d/docker-compose## exit后重新登入即可使用docker命令補全
將橋接的IPv4流量傳遞到iptables的鏈**(所有節點)**
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# 加載br_netfilter模塊
modprobe br_netfilter# 查看是否加載
lsmod | grep br_netfilter# 生效
sysctl --system
安裝kubeadm,kubelet和kubectl(所有節點)
# 添加yum源
vi /etc/yum.repos.d/kubernetes.repo[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0# 更新yum源
yum clean all
yum makecache fast# 安裝kubeadm,kubelet和kubectl
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
systemctl restart kubelet
systemctl enable kubelet
主節點配置
ssh密鑰生成并分發
# 生成密鑰
ssh-keygen -t rsa# 分發密鑰給工作節點
ssh-copy-id -i .ssh/id_rsa.pub root@node01-k8s
ssh-copy-id -i .ssh/id_rsa.pub root@node02-k8s
部署Kubernetes Master(這一步建議所有節點都做一遍,因為下面很快就會看到血淋淋的教訓了!!!)
# 下載依賴(因為實測直接運行下面會提示缺少google_containers……這個鏡像,可能是沒有1.8.0版本,所以直接手動pull一個,改一下標簽名)
docker pull coredns/coredns:1.8.0# 將coredns/coredns:1.8.0 鏡像標記為google_containers……docker tag coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0# 這里網絡較慢,請耐心等待……
指定阿里云鏡像倉庫地址
# apiserver-advertise-address值是主機的ip,其他的無需更改kubeadm init \--apiserver-advertise-address=192.168.242.10 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.21.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16# 這里網絡較慢,請耐心等待……
根據提示信息,在Master節點上運行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
!!!重要提示,上一部完成的時候末尾會顯示一個token,請保管好,一會兒添加節點這是憑證!!!
工作節點配置(所有工作節點)
# 在daemon.json文件中指定驅動
cat /etc/docker/daemon.json{"registry-mirrors": ["https://docker.xuanyuan.me/"],"exec-opts":["native.cgroupdriver=systemd"]}# 確定文件如上含有"exec-opts":["native.cgroupdriver=systemd"]即可。# 重啟docker
systemctl restart docker
# 看一下狀態,確定上面配置文件沒錯,docker正常運行
systemctl status docker
將工作節點加入Kubernetes Node(請輸入自己的token)
# 所有工作節點均粘貼此命令
kubeadm join 192.168.242.10:6443 --token y868jj.hoknpgwpykqodf41 \--discovery-token-ca-cert-hash sha256:af0db6d53cb1bc5cf66f7fa2cc86f5221c6bca9c5682075c61a88d6bf7c8198e
!!!!!這一步卡住不動的,一定一定要檢查自己的防火墻和selinux是否關閉!!!!!!
在主節點上將/etc/kubernetes/admin.conf文件copy到工作節點上
# 主節點上copy文件
scp /etc/kubernetes/admin.conf node01-k8s:/etc/kubernetes/
scp /etc/kubernetes/admin.conf node02-k8s:/etc/kubernetes/# 分別在每個node上運行以下命令:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
加入成功在三臺機器上運行kubectl get nodes
都會有如下效果**(!!!注意,你的應該是node01和node02狀態是Ready,我這里出錯了)**
注意,每臺機器上都是一樣的才說明沒問題,某一臺不是下圖這種就說明有問題!!!
安裝Pod網絡插件(主節點)
# 可能需要魔法,如果下載不了就下載到本地后上傳服務器wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f kube-flannel.yml# 注意這里網絡可能不好,可以檢查一下下載網速,可以看出是在下載中。kubectl get pods -n kube-system也可以看到前兩個pod的狀態是Pending
如果這里狀態變為
ImagePullBackOff
可以看一下自己的pod詳細描述,這里舉一個例子
上面顯示
ImagePullBackOff
,說明有問題,可以使用kubectl describe pod coredns-545d6fc579-rddhk -n kube-system命令進行查看(注意換成自己的pod名)
可以看到coredns的pod被調度到k8s-node01上了,而這個節點沒有對應的鏡像,也就是下面圖中我說過的,建議都做一遍(為什么現在才說,因為本人忘記配置了,在這里報錯后才想起來,括號里的字也是這時候補上的,懶得調整格式了)
ok,做完這一切,完全恢復正確了。
這里可以看見master狀態也是
Ready
了
安裝命令補全工具(可以Tab補齊命令!)
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
!!一定要看!!
集群搭建完結撒花(本文最后兩張圖的所有STATUS務必是Running和Ready,這才代表你可以完結撒花) |