2、K8S集群安裝、可視化管理組件安裝


全部文章導航

點此查看K8S、Jenkins持續集成環境搭建全部文章

1、准備工作

1、使用xsheel或Putty命令行工具連接4台虛擬機

新建連接,設置連接、身份信息:

image-20210915112752862

連接完成:

image-20210915112617997

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

image-20210915113140391

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。

image-20210922164157348

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、登錄訪問管理界面

image-20210922164453858

方式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

image-20210923110505435

4、安裝metrics-server,可以查看詳細資源詳細:

image-20210923110722928

image-20210916110049273

參考資料

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM