全部文章導航
1、准備工作
1、使用xsheel或Putty命令行工具連接4台虛擬機
新建連接,設置連接、身份信息:
連接完成:
2、設置hosts
# 編輯hosts文件
vi /etc/hosts
# 127.0.0.1添加本機hostname和k8s.free.com
# 添加其他虛擬機的ip和hostname
192.168.110.102 free2
192.168.110.103 free3
192.168.110.104 free4
192.168.110.100 k8s.free.com # k8s master域名為k8s.free.com,固定解析到192.168.110.100
2、k8s安裝
1、系統設置(所有節點)
# 禁用防火牆,虛擬機安裝時已經執行
sudo systemctl stop firewalld & systemctl disable firewalld
# 禁用SELINUX,修改配置文件、確保重啟后也禁用
sudo setenforce 0
sudo sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
# 禁用swap
sudo swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 配置內核參數,將橋接的IPv4流量傳遞到iptables的鏈
sudo bash -c 'cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF'
sysctl --system
2、添加yum源(所有節點)
# 添加基礎源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
# 添加K8S安裝源
sudo bash -c 'cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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、安裝Docker(所有節點)
# 安裝yum依賴包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools
# 設置源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看最近20個可安裝docker-ce版本清單
yum list docker-ce --showduplicates | tail -n 20
# 安裝指定版本docker
sudo yum -y install docker-ce-3:20.10.8-3.el8
# centos 8遇到 problem with installed package buildah-1.19.7-1.module_el8.4.0+781+acf4c33b.x86_64 問題
# 方法1 執行yum erase podman buildah 再執行 yum -y install docker-ce
# 設置開機啟動
sudo systemctl enable docker
sudo systemctl start docker
# 追加命令參數,native.cgroupdriver=systemd
sudo vi /usr/lib/systemd/system/docker.service
ExecStart命令追加: --exec-opt native.cgroupdriver=systemd
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
# 重啟docker
sudo systemctl daemon-reload
sudo systemctl restart docker
4、kubelet、kubeadm、kubectl安裝
1、所有節點(free1、free2、free3)安裝kubelet、kubeadm、kubectl
# 安裝kubectl、kubelet、kubeadm,設置kubelet開機啟動,啟動kubelet。
# 安裝最新版本 sudo yum install -y kubectl kubelet kubeadm
# 安裝指定版本
sudo yum install -y kubectl-1.22.2-0 kubelet-1.22.2-0 kubeadm-1.22.2-0
# 設置開機啟動
sudo systemctl enable kubelet
sudo systemctl start kubelet
# 查看K8S版本-See
kubeadm version
kubectl version --client
kubelet --version
2、master(free1)節點初始化:
# 參考資料: https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/
# 創建初始化配置文件
sudo kubeadm config print init-defaults --kubeconfig ClusterConfiguration > /home/free1/bin/kubeadm-master-config.yaml
# 修改配置文件
vim /home/free1/bin/kubeadm-master-config.yaml
kubeadm-master-config.yaml配置文件內容:
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.110.100 # 本機Ip
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
imagePullPolicy: IfNotPresent
name: node
taints: null
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.110.100:6443" # 搭建多master高可用時,可設置為Vip地址
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers # 設置阿里雲鏡像地址
kind: ClusterConfiguration
kubernetesVersion: 1.22.1
networking:
dnsDomain: cluster.local
podSubnet: 12.16.0.0/16 # Pod網段
serviceSubnet: 12.26.0.0/16 # Service網段
scheduler: {}
修改好配置文件后繼續執行:
# 查看所需鏡像列表 -See
sudo kubeadm config images list --config /home/free1/bin/kubeadm-master-config.yaml
# 拉取鏡像
sudo kubeadm config images pull --config /home/free1/bin/kubeadm-master-config.yaml
# 初始化
sudo kubeadm init --config /home/free1/bin/kubeadm-master-config.yaml
# 異常處理1:registry.aliyuncs.com/google_containers/coredns:v1.8.{v} not found
# 參考:https://blog.csdn.net/a749227859/article/details/118732605
sudo docker pull registry.aliyuncs.com/google_containers/coredns:1.8.{v}
sudo docker tag registry.aliyuncs.com/google_containers/coredns:1.8.{v} registry.aliyuncs.com/google_containers/coredns:v1.8.{v}
sudo docker rmi registry.aliyuncs.com/google_containers/coredns:1.8.{v}
# 出現異常重新執行
# 如果提示文件存在、端口占用,可以先執行: kubeadm reset
# kubeadm init --config=/home/free1/bin/kubeadm-master-config.yaml
# 成功則看到輸出結果 -See
# kubeadm join 192.168.110.100:6443 --token r6wxwf.myqvaa2y66xbici3 \
# --discovery-token-ca-cert-hash sha256:84851513d6a871456260507d445a3db174fb4ba5864f68304d07f5636f0b309f
# 為普通用戶添加 kubectl 運行權限,需要使用普通用戶身份執行,echo $HOME打印$HOME變量,$HOME=/home/free1
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2、master(free1)安裝calico網絡
# 查看Node 和 Pod -See
kubectl get node
kubectl get pod --all-namespaces
# 查看日志 -See
journalctl -f
# 安裝calico網絡
sudo kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
3、從節點(free2、free3)加入集群
# 參考資料: https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/
# 創建加入token,輸出從節點加入命令行
sudo kubeadm token create --print-join-command
# node 節點添加,使用kubeadm token create --print-join-command 會輸出加入集群指令
sudo kubeadm join 192.168.110.100:6443 --token 81dals.6uy35dwbae4xwi39 --discovery-token-ca-cert-hash sha256:84851513d6a871456260507d445a3db174fb4ba5864f68304d07f5636f0b309f
3、可視化管理界面安裝(可以只安裝Kuboard)
方式1:官方的dashboard安裝
# 下載
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml
# 找到配置文件如下內容
# 修改配置文件部分內容結束 --Tag3
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort #添加
ports:
- port: 443
targetPort: 8443
nodePort: 31089 # 添加
selector:
k8s-app: kubernetes-dashboard
# 修改配置文件部分內容結束 --Tag3
# 然后創建POD
sudo kubectl apply -f recommended.yaml
# 查看kubernetes-dashboard -See
sudo kubectl get svc -n kubernetes-dashboard
# 創建TOKEN
sudo kubectl create sa dashboard-admin -n kube-system
# 授權TOKEN 訪問權限
sudo kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
2、訪問https://192.168.110.100:31089/,192.168.110.100可以為集群任意節點Ip。
3、在master服務器執行獲取TOKEN
# 獲取TOKEN
ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}')
DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}')
echo ${DASHBOARD_LOGIN_TOKEN}
4、登錄訪問管理界面
方式2:Kuboard安裝
1、安裝kuboard
# 安裝Kuboard-v3版本。參考: https://kuboard.cn/install/v3/install-in-k8s.html#%E5%AE%89%E8%A3%85
sudo kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
2、登錄后台:
http://192.168.110.100:30080
用戶名: admin
密 碼: Kuboard123
3、安裝kuboard-agent
curl -k 'http://192.168.110.100:30080/kuboard-api/cluster/default/kind/KubernetesCluster/default/resource/installAgentToKubernetes?token=BpLnfgDsc2WD8F2qNfHK5a84jjJkwzDk' > kuboard-agent.yaml
sudo kubectl apply -f ./kuboard-agent.yaml
4、安裝metrics-server,可以查看詳細資源詳細:
參考資料
https://www.cnblogs.com/guarderming/p/12876877.html#_label2
https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/
Kubectl Init說明
# 初始化 Control-plane/Master 節點
kubeadm init \
--apiserver-advertise-address 0.0.0.0 \
# API 服務器所公布的其正在監聽的 IP 地址,指定“0.0.0.0”以使用默認網絡接口的地址
# 切記只可以是內網IP,不能是外網IP,如果有多網卡,可以使用此選項指定某個網卡
--apiserver-bind-port 6443 \
# API 服務器綁定的端口,默認 6443
--cert-dir /etc/kubernetes/pki \
# 保存和存儲證書的路徑,默認值:"/etc/kubernetes/pki"
--control-plane-endpoint kuber4s.api \
# 為控制平面指定一個穩定的 IP 地址或 DNS 名稱,
# 這里指定的 kuber4s.api 已經在 /etc/hosts 配置解析為本機IP
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
# 選擇用於拉取Control-plane的鏡像的容器倉庫,默認值:"k8s.gcr.io"
# 因 Google被牆,這里選擇國內倉庫
--kubernetes-version 1.17.3 \
# 為Control-plane選擇一個特定的 Kubernetes 版本, 默認值:"stable-1"
--node-name master01 \
# 指定節點的名稱,不指定的話為主機hostname,默認可以不指定
--pod-network-cidr 10.10.0.0/16 \
# 指定pod的IP地址范圍
--service-cidr 10.20.0.0/16 \
# 指定Service的VIP地址范圍
--service-dns-domain cluster.local \
# 為Service另外指定域名,默認"cluster.local"
--upload-certs
# 將 Control-plane 證書上傳到 kubeadm-certs Secret
節點重新加入
# master執行: 查看節點信息
kubectl get node
# master執行: 移除節點
kubectl delete node free2
# 需要重新加入的節點執行: 還原
kubeadm reset
# master執行: 創建加入命令信息
kubeadm token create --print-join-command
#輸出 kubeadm join 192.168.110.100:6443 --token htz1im.7fks98dckd7d1fk5 --discovery-token-ca-cert-hash sha256:84851513d6a871456260507d445a3db174fb4ba5864f68304d07f5636f0b309f
# 需要重新加入的節點執行: 加入集群,使用kubeadm token create --print-join-command輸出結果執行
kubeadm join 192.168.110.100:6443 --token htz1im.7fks98dckd7d1fk5 --discovery-token-ca-cert-hash sha256:84851513d6a871456260507d445a3db174fb4ba5864f68304d07f5636f0b309f --control-plane --certificate-key 0d7b787ab042c41e33ef28fd5341313cb5cc7ce5b7307dcb7921c4f370a9c31d
多個master節點加入集群
master節點加入時,多了control-plane和certificate-key。certificate-key可以使用sudo kubeadm init phase upload-certs進行生成。
# master執行: 創建加入命令信息
kubeadm token create --print-join-command
# master節點創建certs
sudo kubeadm init phase upload-certs --upload-certs # 輸出 certificate-key
# 做為master加入
kubeadm join 192.168.110.100:6443 --token wo2fkk.1oghvayals80h74i --discovery-token-ca-cert-hash sha256:b9dc272830b34813e289f88d354f7c513795f42e95278654f66c557954cb46cb --control-plane --certificate-key 81b1b4ed1634dae0583b8d433abfa593eccb9716a332edd894f6285580996928
重新設置controlPlaneEndpoint
# 刪除證書
rm /etc/kubernetes/pki/apiserver.*
# 重新初始化配置
kubeadm init phase certs apiserver --config=/home/free1/bin/kubeadm-master-config.yaml
重新初始化集群
# 刪除用戶執行的證書文件
rm -rf $HOME/.kube
# 重新添加
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config