kubernetes基礎篇 —— 集羣部署

官方網站:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

1. 集羣部署

1.1 環境

主機 IP
k8s1 192.168.1.20
k8s2 192.168.1.21
k8s3 192.168.1.22
k8s4 192.168.1.23
  • 關閉節點的selinux和iptables防火牆
  • 所有節點部署docker引擎
  • 將k8s2作爲master節點,k8s3和k8s4作爲從節點

1.2 harbor倉庫的搭建[k8s1]

下載並解壓離線安裝包
在這裏插入圖片描述
首先配置好docker倉庫,若不會配置,可以參考該文章中配置方法:https://blog.csdn.net/m0_37868230/article/details/106862267#t6
下載docker-ce並設置爲開機自啓

yum install -y docker-ce
systemctl start docker.service
systemctl enable docker.service

在這裏插入圖片描述
查看docker信息

docker info

在這裏插入圖片描述
消除docker中存在的警告,將bridge-nf-call-iptables和bridge-nf-call-ip6tables開啓

vim /etc/sysctl.conf
###
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
###
sysctl --system   # 生效

在這裏插入圖片描述
可以看到,警告已經消除,可正常使用。
編輯harbor配置文件

vim harbor.yml

在這裏插入圖片描述
運行檢測環境

./install.sh

在這裏插入圖片描述
可以看到,缺少 docker-compose[單臺主機上維護多個容器] 環境
下載並搭建docker-compose環境

mv docker-compose-Linux-x86_64-1.24.1 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

在這裏插入圖片描述
在這裏插入圖片描述

1.3 三個節點docker-ce的下載和安裝

這裏可以使用之前自己的docker,也可以使用清華或者阿里的docker。
安裝系統工具

yum install -y yum-utils device-mapper-persistent-data lvm2

在這裏插入圖片描述
部署docker倉庫

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

在這裏插入圖片描述
安裝docker-ce
在這裏插入圖片描述
報錯,查看錯誤信息是缺少不低於2:2.74版本的container-selinux
下載container-selinux並安裝
在這裏插入圖片描述
將安裝包上傳到共享倉庫上
在這裏插入圖片描述
更新倉庫repo數據
在這裏插入圖片描述
在k8s1將docker.repo複製給k8s3和k8s4

scp docker-ce.repo k8s3:/etc/yum.repos.d/

在這裏插入圖片描述
在k8s3和k8s4安裝docker

 yum install -y docker-ce

在這裏插入圖片描述
在這裏插入圖片描述
啓用,使其 docker info 正常使用

vim /etc/sysctl.conf
###
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
###
sysctl --system   # 生效

啓動並設置爲開機自啓

systemctl enable --now docker.service

1.4 kubernetes部署

官方網站:https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#docker

1.4.1 安裝部署kubernetes前系統環境的配置

  • 設置docker守護程序[三個節點都需要]
    修改k8s2中docker守護程序
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

在這裏插入圖片描述
重點:native.cgroupdriver 修改爲 systemd 模式
原先的模式爲:在這裏插入圖片描述
重啓docker

systemctl restart docker.service

在這裏插入圖片描述
可以看到,Cgroup Driver 已經修改爲 systemd 的模式
將文件複製到k8s3和k8s4上,並重啓docker
在這裏插入圖片描述

  • 禁用swap[三個k8s集羣節點都需要]
swapoff -a
vim /etc/fstab
###
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
###

在這裏插入圖片描述

1.4.2 部署kubernetes

安裝Docker-ce
這個前面已經進行了詳細的介紹
設置倉庫[三個節點均設置]

vim /etc/yum.repos.d/k8s.repo
###
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7- x86_64/
enabled=1
gpgcheck=0
###

在這裏插入圖片描述
安裝軟件包[三個節點均安裝]

yum install -y kubelet kubeadm kubectl

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
開啓服務並設置開機自啓

systemctl enable --now kubelet

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

1.4.3 master節點從外網拉取鏡像

創建集羣前的準備:

  • 一臺或多臺運行兼容deb / rpm的Linux操作系統的計算機
  • 每臺主機至少要分配2GB內存空間
  • 用作master節點的計算機上至少有2個CPU
  • 集羣中所有主機需要能夠聯網

查看默認的配置信息

kubeadm config print init-defaults

在這裏插入圖片描述
列出所需鏡像

kubeadm config images list   # 列出所需鏡像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers    # 指定鏡像倉庫位置並列出所需鏡像

在這裏插入圖片描述
可以看到,kubeadm默認讀取的是k8s.gcr.io鏡像庫。但事實上,當前我們無法直接訪問到k8s.gcr.io鏡像庫,需要翻牆纔可以。因此我們就需要去指定鏡像庫,這裏我們使用阿里雲的鏡像庫
在這裏插入圖片描述
拉取鏡像

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

在這裏插入圖片描述
這裏出現了報錯。查看錯誤信息,是因爲我使用的k8s是最新的,遠程倉庫中沒有更新。
指定版本去拉取

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 版本號

在這裏插入圖片描述
在這裏插入圖片描述
可以看到,鏡像已經拉取成功

1.4.4 將master拉取的鏡像上傳到私有倉庫

harbor主機[k8s1]將證書傳給master節點主機[k8s2]
在這裏插入圖片描述
在這裏插入圖片描述
master節點主機登陸reg.harbor.com

docker login reg.harbor.com

在這裏插入圖片描述
將鏡像上傳到倉庫

for i in `docker images | grep registry | awk '{print $1":"$2}' | awk -F '/' '{print $3}'`; do
> docker tag registry.aliyuncs.com/google_containers/$i reg.harbor.com/library/$i;
> docker push reg.harbor.com/library/$i
> done

在這裏插入圖片描述
登陸harbor倉庫查看
在這裏插入圖片描述
將證書傳給另外兩個節點,以便用來拉取鏡像
在這裏插入圖片描述
刪除阿里雲倉庫鏡像,只保留私有倉庫鏡像

for i in `docker images | grep registry.aliyuncs.com | awk '{ print $1":"$2 }'`; do docker rmi $i; done

在這裏插入圖片描述

1.4.5 集羣部署

初始化集羣
–pod-network-cidr=10.244.0.0/16 # 使用flannel網絡組件時必須添加

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.harbor.com/library

在這裏插入圖片描述
報錯,找不到版本1.18.5,默認是找軟件版本,和我們實際版本不一致,指定版本 --kubernetes-version v1.18.3

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.harbor.com/library --kubernetes-version v1.18.3  --ignore-preflight-errors=NumCPU

在這裏插入圖片描述
在這裏插入圖片描述
節點擴容

kubeadm join 192.168.1.21:6443 --token ywa2ks.u6je272aslskl73x \
    --discovery-token-ca-cert-hash sha256:e1d4464a12968a663aefd51550a346f5da195550e7bc9869e109d37622f6bfb5 

在這裏插入圖片描述
上圖爲初始化成功時最後系統打印的信息,將紅框部分內容在其他節點運行(k8s3,k8s4)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
注意,這裏的token會過期(默認24小時)過期後其他節點要加入時需要生成新的token

kubeadm token create

配置kubectl

**創建一個普通用戶**
useradd kubeadm
這裏要注意:需要對普通用戶權限進行設置
visudo
###
kubeadm  ALL=(ALL)   NOPASSWD:ALL
###
su - kubeadm
mkdir -p $HOME/.kube  #創建目錄
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
**使用超級用戶**
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

在這裏插入圖片描述
我使用的是root用戶,可以創建普通用戶,然後通過sudo授權,關鍵在/etc/kubernetes/admin.conf文件

kubectl get node      ##配置完成後查看節點
kubectl get all

在這裏插入圖片描述
配置kubectl命令補齊功能

echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

安裝flannel網絡組件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

在這裏插入圖片描述
其他網絡組件:[https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create- cluster-kubeadm/#pod-network](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create- cluster-kubeadm/#pod-network)
Master查看狀態

kubectl get cs

在這裏插入圖片描述

kubectl get nodes

在這裏插入圖片描述
若node節點顯示notready,參考該文章:https://www.cnblogs.com/lph970417/p/11805934.html

kubectl get pod -n kube-system 

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章