一、kubelet
1、Kubelet,一個負責 Kubernetes 控制平面和 Node 之間通信的程序;它管理在機器上運作的 Pod 和容器。
2、容器運作時(如 Docker)負責從系統資料庫中拉取容器鏡像、解包容器并運
行應用程式
二、元件
Master主要節點
1、apiserver
叢集統一入口,以restful方式,交給etcd存儲。
2、scheduler
節點排程,選擇node節點應用部署
3、controller-manager
處理叢集中正常背景任務,一個資源對應一個控制器。
4、etcd
存儲系統,用于儲存叢集相關資料。
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-Dqvlk2dS-1633918257757)(C:\Users\211\AppData\Roaming\Typora\typora-user-images\image-20210928151401736.png)]
node工作節點
1、kubelet
master派到node節點代表,管理本機容器。
2、kube-proxy
提供網絡代理,負載均衡。
三、概念
1、pod
最小部署單元
一組容器的集合
共享網絡
生命周期是短暫
2、controller
確定預期的pod副本數量
無狀态應用部署
有狀态應用部署
確定所有的node運作同一個Pod
一次性任務和定時任務
3、service
定義一組pod的通路規則
四、k8s環境平台規劃
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-5d33t7xm-1633918257759)(C:\Users\211\AppData\Roaming\Typora\typora-user-images\image-20210928153724798.png)]
1、部署叢集的方式
1)kubeadm
2)二進制包
2、準備需求
叢集互ping
通路外網
禁止swap分區
五、kubeadmin
1、初始化操作
1、建立虛拟機3台
2、禁止swap分區
swapoff -a //臨時
sed -ri 's/.*swap.*/#&/' /etc/fstab //永久
3、關閉防火牆
systemctl stop firewalld //臨時關閉
systemctl disable firewalld //永久關閉
4、關閉selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config //永久
setenforce 0 //臨時關閉
5、給主機取名稱
hostnamectl set-hostname k8smaster /k8snode1/k8snode2 //修改主機名
6、在master添加hosts
cat >> /etc/hosts <<EOF
172.21.50.35 k8smaster
172.21.50.36 k8snode1
172.21.50.37 k8snode2
EOF
7、将橋接的ipv4流量傳遞到iptables的鍊
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-iptable = 1
EOF
sysctl --system //生效
8、時間同步
yum install ntpdate -y
ntpdate time.windows.com
2、安裝三方支援
1)、安裝docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.e17
systemctl enable docker && systemctl start docker //開機啟動
docker --version
//檢視鏡像
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
docker info //檢視鏡像源是否改成功
2)、添加阿裡雲yum軟體源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-e17-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
EOF
//這個不行
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
3)、安裝kubeadm,kubelet和kubectl
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
systemctl enable kubelet
4)、在master機器上執行
kubeadm init \
--apiserver-advertise-address=172.21.50.35 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
//去掉斜杠,把指令集中在一行執行
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGL3EzXlpXazxSUyEWNMZDN1A1QiVjQDZTNqVHT1UUc1UTUyEWNp1mW2I0QJZTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLiFWOiV2YkZmY5QTMiVWM5UmMxQDNlhTZmNmY3ATZ5QzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
注釋:由于外國的k8s不能通路,該成阿裡雲。
master主機位址改成自己的。
5)、在master機器上執行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3、加入節點到主節點
kubeadm join 172.21.50.35:6443 --token gnlql3.0xj8y9kkle7630ll \
--discovery-token-ca-cert-hash sha256:589006c1952acdd4c8208551a63088519e8002c4ee9697b47d466c741d817e9b
kubectl get nodes //擷取節點資訊
4、部署CNI網絡插件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
注釋:預設鏡像位址無法通路,sed指令修改為docker hub鏡像倉庫。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl get pods -n kube-system
5、測試
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort //對外暴露端口
kubectl get pod,svc //檢視資訊
六、常用指令
kubectl get pods //擷取pod資訊
kubectl get nodes //擷取nodes資訊
七、查詢kube join
kubeadm token create --print-join-command
八、子節點斷電重新開機
1、追蹤日志
journalctl -f -u kubelet
2、重新開機docker
systemctl daemon-reload
systemctl restart docker
3、重新開機kubelet
systemctl restart kubelet.service