官方網站: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