本博客鏈接:https://security.blog.csdn.net/article/details/128840528
一、提要
部署Kubernetes集群至少需要3臺服務器,其中至少要有1個服務器做master節(jié)點,至少要有1個服務器做node節(jié)點,且節(jié)點名稱是唯一的。
當集群中只有一個master節(jié)點時,如果其出現了故障,會導致Kubernetes的控制平面完全失效。如要保證Kubernetes集群的高可靠性,可以設置多個master,當其中部分master出現故障時,其他master還可以管理整個集群。
因此,我們這里使用三臺服務器部署,可以有2種部署方案,2個master+1個node,或者1個master+2個node,這里我們使用后一種方式。
三臺服務器:
master,192.168.153.145
node1,192.168.153.146
node2,192.168.153.147
二、部署
修改主機名
# master機器執(zhí)行命令
hostnamectl set-hostname master
# node1機器執(zhí)行命令
hostnamectl set-hostname node1
# node2機器執(zhí)行命令
hostnamectl set-hostname node2
關閉防火墻:
# 3臺機器都執(zhí)行
systemctl stop firewalld
systemctl disable firewalld
關閉selinux:
# 3臺機器都執(zhí)行
sed -i 's/enforcing/disabled/' /etc/selinux/config
關閉swap分區(qū):
# 3臺機器都執(zhí)行
vim /etc/fstab
注釋掉該行:/dev/mapper/centos-swap
編輯/etc/hosts文件,新增以下內容:
# 3臺機器都執(zhí)行
192.168.153.145 master master
192.168.153.146 node1 node1
192.168.153.147 node2 node2
創(chuàng)建并編輯/etc/sysctl.d/k8s.conf,新增以下內容:
# 主要是為了將橋接的IPv4流量傳遞到iptables
# 只在master機器上執(zhí)行
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
執(zhí)行命令:
# 只在master機器上執(zhí)行
sysctl --system
配置時間同步:
# 3臺機器都執(zhí)行
yum -y install chrony
編輯/etc/chrony.conf文件,新增以下內容:
# 3臺機器都執(zhí)行
pool time1.aliyun.com iburst
執(zhí)行命令:
# 3臺機器都執(zhí)行
systemctl enable --now chronyd
免密認證:
# 只在master機器上執(zhí)行
ssh-keygen -t rsa
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2
重啟機器:
# 3臺機器都執(zhí)行
reboot
安裝docker:
# 3臺機器都執(zhí)行
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker
systemctl enable docker
docker -v
創(chuàng)建并編輯/etc/yum.repos.d/kubernetes.repo,新增以下內容:
# 主要是為了添加Kubernetes的源
# 3臺機器都執(zhí)行
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
安裝kubeadm、kubelet、kubectl:
注:1.24以上版本已經放棄docker,如果安裝,k8s在初始化時會報錯
# 3臺機器都執(zhí)行
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet
執(zhí)行命令:
# 只在master機器上執(zhí)行
docker pull coredns/coredns:1.8.5
docker tag coredns/coredns:1.8.5 registry.aliyuncs.com/google_containers/coredns:v1.8.5
創(chuàng)建并編輯/etc/docker/daemon.json,新增以下內容:
# 3臺機器都執(zhí)行
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
執(zhí)行命令:
# 3臺機器都執(zhí)行
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
部署Kubernetes master節(jié)點:
# 只在master機器上執(zhí)行
kubeadm init \
--apiserver-advertise-address=192.168.153.145 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
-----------------------單行用于復制------------------------------
kubeadm init --apiserver-advertise-address=192.168.153.145 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.6 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
如有問題通過百度解決,漫長等待后,記錄下以下值:
kubeadm join 192.168.153.145:6443 --token zqlnxn.b8110o37bp5kwinl \
--discovery-token-ca-cert-hash sha256:69cf2bd1bf87495d1e2e5dc11b3736151feaf00e38a59ea66b276007a163a0aa
如下圖所示:
執(zhí)行命令:
# 只在master機器上執(zhí)行
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' > /etc/profile.d/k8s.sh
source /etc/profile.d/k8s.sh
安裝Pod網絡插件:
# 只在master機器上執(zhí)行
# 網上找到kube-flannel.yml下載下來之后手動安裝
kubectl apply -f /root/kube-flannel.yml
生成worker節(jié)點用來加入集群的校驗token:
# 只在master機器上執(zhí)行
kubeadm token create --print-join-command
kubeadm join 192.168.153.145:6443 --token zqlnxn.b8110o37bp5kwinl --discovery-token-ca-cert-hash sha256:69cf2bd1bf87495d1e2e5dc11b3736151feaf00e38a59ea66b276007a163a0aa
加入Kubernetes的Node節(jié)點:
# 在兩個node機器上執(zhí)行
echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
kubeadm join 192.168.153.145:6443 --token zqlnxn.b8110o37bp5kwinl --discovery-token-ca-cert-hash sha256:69cf2bd1bf87495d1e2e5dc11b3736151feaf00e38a59ea66b276007a163a0aa
master綁定:
# 在兩個node機器上執(zhí)行
echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> /etc/profile
source /etc/profile
查看節(jié)點狀態(tài)(三臺機器均可查看),如下圖所示:
至此,如果解決完所有報錯,則部署結束。
三、測試Kubernetes集群
執(zhí)行命令:
# 只在master機器上執(zhí)行
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
如圖所示:
瀏覽器訪問:
四、Kubernetes實踐
以下只在master機器上執(zhí)行
4.1、Deployment資源部署
集群上運行Nginx鏡像:
kubectl run nginx --image=nginx
查看部署的Nginx應用:
kubectl get deployments.apps nginx
查看Nginx部署的詳細信息及過程:
kubectl describe deploy nginx
查看Nginx的ReplicaSet資源:
# DESIRED-副本數期望值,CURRENT-當前副本數,READY-就緒狀態(tài)的副本數,AGE-已啟動時間
kubectl get rs
查看Nginx的Pod資源:
kubectl get pod -o wide
4.2、Deployment日志查看
查看Nginx的應用日志:
kubectl logs nginx-85b98978db-kxvn6
4.3、Deployment資源執(zhí)行
通過kubectl進入Nginx應用對應的容器:
kubectl exec -it nginx-85b98978db-kxvn6 bash
查看Service和Pod的映射關系:
kubectl get endpoints
4.4、Deployment資源擴展
擴展Nginx應用的副本數為3(原來是1):
kubectl scale deployment nginx --replicas=3
擴展后查看Nginx應用的Deployment、ReplicaSet、Pod、Endpoints資源:
kubectl get deployment.apps nginx
kubectl get rs
kubectl get pod
kubectl get ep
4.5、資源刪除
刪除對應的Deployment資源(通過kubectl run啟動的):
kubectl rollout undo deploy nginx
檢驗刪除結果:
kubectl get pod
刪除對應的Service資源(通過kubectl apply啟動的):
kubectl delete -f /tmp/nginx.svc.yml
4.6、故障排查
查看Nginx的應用日志:文章來源:http://www.zghlxwxcb.cn/news/detail-401333.html
kubectl logs nginx-85b98978db-kxvn6
輸出資源的詳細信息:文章來源地址http://www.zghlxwxcb.cn/news/detail-401333.html
kubectl describe pod nginx-85b98978db-kxvn6
到了這里,關于Kubernetes集群部署與實踐的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!