簡單理解:
docker默認是單機使用的,不可以跨主機,也沒有高可用,所以生產環境一般不會單獨使用docker跑應用,k8s主要是作為docker的一個調度器來使用,可以使容器實現跨節點通信,當一台運行容器的節點故障后,容器會自動遷移到其它可用節點上繼續運行服務,目前比較常用的是k8s
k8s架構:k8s主要由master節點和node節點構成,而且常用操作都在master上操作,作為控制節點角色,node節點提供計算功能
master:
kubectl:k8s的所有操作都是通過kubectl指令操作的
REST API:k8s對外部服務提供的接口服務,例如圖形化界面或者kubectl都會通過REST API接口下發指令來控制k8s
scheduler:調度器,例如創建pod,scheduler可以控制將pod分配到哪個pod節點
controller-manager:檢測pod或者node的健康狀態,並維持pod的正常運行,如果pod故障,controller-manger會自動修復,例如在啟動一個pod副本
kubelet:代理軟件,例如在master上對node節點下發的指令,都需要通過kubelet組建來告知各個組件
etcd:數據庫,所有配置數據都存放在etcd數據庫中
kubeproxy:在所有節點都需要運行kubeproxy,后期通過創建svc來將pod映射到外網,當外部通過svc-ip訪問pod的時候就需要通過kubeporxy進行路由轉發到pod
node:
pod:k8s環境運行的最小單位,一個pod中可以包含一個或多個容器
所有節點操作
1.修改centos時區校准時間
timedatectl set-timezone Asia/Shanghai
yum install -y ntpdate
yum install -y update
ntpdate us.pool.ntp.org
2.下載安裝docker
yum install -y yum-utils
正確推薦使用國內的 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
阿里雲鏡像加速 https://www.aliyun.com/product/acr
文件目錄 /etc/docker/daemon.json
{
"registry-mirrors": ["https://qiyb9988.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
2.給每一台機器設置主機名
2.1所有主機修改
hostname 主機名 或者 hostnamectl set-hostname 主機名 ---> 重啟
2.2所有主機查看 hostname
3.修改添加master節點目錄 vim /etc/hosts
4.所有主機安裝kubeadm\kubelet等
4.1所有主機去阿里雲上面下載kubeadm\kubelet等 ----- > https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.6a151b11acVrNm
4.2查看所有主機 安裝報錯日志 cat /var/log/messages
4.3設置所有主機 kubelet 內存
vim /etc/sysconfig/kubelet ----> KUBELET_EXTRA_ARGS="--fail-swap-on=false"
4.4 查看所有主機網橋IP是都為1
cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
cat /proc/sys/net/bridge/bridge-nf-call-iptables
4.5所有主機關閉防火牆
systemctl stop firewalld && systemctl disable firewalld
4.6 所有主機查看kubelet配置 與docker 是都一致
使用docker info 查看
修改該配置 vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://exbabp11.mirror.aliyuncs.com"], #修改鏡像倉庫
"exec-opts": ["native.cgroupdriver=systemd"] #修改配置
}
4.7 node節點安裝的鏡像 都是通過阿里下載 重新打標簽處理
- registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.0
- k8s.gcr.io/kube-proxy:v1.23.0
- rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
- k8s.gcr.io/pause:3.6
- registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
- registry.cn-hangzhou.aliyuncs.com/k8sos/flannel:v0.13.1-rc2
注意 master節點要下其他鏡像
docker master節點下載K8S鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.0 k8s.gcr.io/kube-apiserver:v1.23.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.0 k8s.gcr.io/kube-scheduler:v1.23.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.0 k8s.gcr.io/kube-proxy:v1.23.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0 k8s.gcr.io/etcd:3.5.1-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.0 k8s.gcr.io/kube-controller-manager:v1.23.0
4.8 master 節點初始化
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --kubernetes-version=1.23.0
成功 必須還要按照K8S提示安裝.kube目錄等信息
注意令牌有效時間;超時令牌會自動消失 要重新獲取
查看kubelet令牌
kubeadm token list
創建kubelet令牌
kubeadm token create
獲取身份sha256標識
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
更換令牌與sha256 ---> kubeadm join 172.20.17.150:6443 --token xpjjqv.tzpr3bvjzfbfx8ns --discovery-token-ca-cert-hash sha256:ea3b344f88ae28ac48d77a68b4c37df7d518b9ee937327aed98ea56a7ae2e168
查看節點是否正常 及節點是否都添加上來
kubectl get nodes
4.9 node節點添加到 master節點 注意報錯信息
kubeadm join 172.20.17.150:6443 --token 779p75.h48im60q8wdo903o --discovery-token-ca-cert-hash sha256:ea3b344f88ae28ac48d77a68b4c37df7d518b9ee937327aed98ea56a7ae2e168
5.卸載 kubernetes
kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd