Git 日誌提交規範
通過kubeadm部署kubernetes
kubernetes介紹
kubernetes是一個可移植的、可擴充套件的開源平臺,用於容器化的工作負載和服務,可促進宣告式配置和自動化。 Kubernetes 擁有一個龐大且快速增長的生態系統。Kubernetes 的服務、支援和工具廣泛可用。
Kubernetes 這個名字源於希臘語,意為“舵手”或“飛行員”。k8s 這個縮寫是因為 k 和 s 之間有八個字元的關係。 Google 在 2014 年開源了 Kubernetes 專案。Kubernetes 建立在 Google 在大規模執行生產工作負載方面擁有十幾年的經驗 的基礎上,結合了社群中最好的想法和實踐
傳統部署時代:
早期,各個組織機構在物理伺服器上執行應用程式。無法為物理伺服器中的應用程式定義資源邊界,這會導致資源分配問題。 例如,如果在物理伺服器上執行多個應用程式,則可能會出現一個應用程式佔用大部分資源的情況, 結果可能導致其他應用程式的效能下降。 一種解決方案是在不同的物理伺服器上執行每個應用程式,但是由於資源利用不足而無法擴充套件, 並且維護許多物理伺服器的成本很高。
虛擬化部署時代:
作為解決方案,引入了虛擬化。虛擬化技術允許你在單個物理伺服器的 CPU 上執行多個虛擬機器(VM)。 虛擬化允許應用程式在 VM 之間隔離,並提供一定程度的安全,因為一個應用程式的資訊 不能被另一應用程式隨意訪問。
虛擬化技術能夠更好地利用物理伺服器上的資源,並且因為可輕鬆地新增或更新應用程式 而可以實現更好的可伸縮性,降低硬體成本等等。
每個 VM 是一臺完整的計算機,在虛擬化硬體之上執行所有元件,包括其自己的作業系統。
容器部署時代:
容器類似於 VM,但是它們具有被放寬的隔離屬性,可以在應用程式之間共享作業系統(OS)。 因此,容器被認為是輕量級的。容器與 VM 類似,具有自己的檔案系統、CPU、記憶體、程序空間等。 由於它們與基礎架構分離,因此可以跨雲和 OS 發行版本進行移植。
容器因具有許多優勢而變得流行起來。下面列出的是容器的一些好處:
- 敏捷應用程式的建立和部署:與使用 VM 映象相比,提高了容器映象建立的簡便性和效率。
- 持續開發、整合和部署:通過快速簡單的回滾(由於映象不可變性),支援可靠且頻繁的 容器映象構建和部署。
- 關注開發與運維的分離:在構建/釋出時而不是在部署時建立應用程式容器映象, 從而將應用程式與基礎架構分離。
- 可觀察性:不僅可以顯示作業系統級別的資訊和指標,還可以顯示應用程式的執行狀況和其他指標訊號。
- 跨開發、測試和生產的環境一致性:在行動式計算機上與在雲中相同地執行。
- 跨雲和作業系統發行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方執行。
- 以應用程式為中心的管理:提高抽象級別,從在虛擬硬體上執行 OS 到使用邏輯資源在 OS 上執行應用程式。
- 鬆散耦合、分散式、彈性、解放的微服務:應用程式被分解成較小的獨立部分, 並且可以動態部署和管理 - 而不是在一臺大型單機上整體執行。
- 資源隔離:可預測的應用程式效能。
- 資源利用:高效率和高密度。
Kubernetes的作用
-
服務發現和負載均衡
Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進入容器的流量很大, Kubernetes 可以負載均衡並分配網路流量,從而使部署穩定。
-
儲存編排
Kubernetes 允許你自動掛載你選擇的儲存系統,例如本地儲存、公共雲提供商等。
-
自動部署和回滾
你可以使用 Kubernetes 描述已部署容器的所需狀態,它可以以受控的速率將實際狀態 更改為期望狀態。例如,你可以自動化 Kubernetes 來為你的部署建立新容器, 刪除現有容器並將它們的所有資源用於新容器。
-
自動完成裝箱計算
Kubernetes 允許你指定每個容器所需 CPU 和記憶體(RAM)。 當容器指定了資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源。
-
自我修復
Kubernetes 重新啟動失敗的容器、替換容器、殺死不響應使用者定義的 執行狀況檢查的容器,並且在準備好服務之前不將其通告給客戶端。
-
金鑰與配置管理
k8s元件
- kube-apiserver: kube-apiserver用於暴露Kubernetes API。任何的資源請求/呼叫操作都是通過kube-apiserver提供的介面進行
- ETCD:etcd是Kubernetes提供預設的儲存系統,儲存所有叢集資料,使用時需要為etcd資料提供備份計劃。
- controller-manager: kube-controller-manager執行管理控制器,它們是叢集中處理常規任務的後臺執行緒。邏輯上,每個控制器是一個單獨的程序,但為了降低複雜性,它們都被編譯成單個二進位制檔案,並在單個程序中執行。包括:節點控制器、副本控制器、端點控制器、serverAccount
- kube-scheduler:實現服務排程資源分配到相應節點的pod,為pod選擇一個Node
- DNS外掛:為叢集內部svc提供DNS記錄
- kubelet:主要的節點代理,實現對pod的日產管理與操作
- kube-proxy:通過在主機上維護網路規則並執行連線轉發來實現kuberneters服務抽象
基礎環境準備
機器 | IP |
---|---|
master01 | 192.168.0.71 |
master02 | 192.168.0.72 |
master03 | 192.168.0.73 |
node01 | 192.168.0.74 |
node02 | 192.168.0.75 |
五臺機器共同配置
配置k8s自動補全
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
配置docker、k8s yum源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
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=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
cd /root/ ; git clone https://github.com/dotbalo/k8s-ha-install.git
配置本地hosts劫持*
[root@k8s-master01 ~]# cat /etc/hosts
192.168.0.72 k8s-master01
192.168.0.71 k8s-master02
192.168.0.73 k8s-master03
192.168.1.100 k8s-master-lb
192.168.0.74 k8s-node01
192.168.0.75 k8s-node02
配置關閉防火牆及selinux、swap
1.防火牆略
2.selinux略
3.swapoff -a && sysctl -w vm.swappiness=0
所有節點配置時間同步
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
ntpdate time2.aliyun.com
# 加入到crontab
*/5 * * * * ntpdate time2.aliyun.com &>/dev/null
# 加入到開機自動同步,/etc/rc.local
ntpdate time2.aliyun.com
叢集配置金鑰對
ssh-keygen -t rsa
for i in k8s-master-01 k8s-master-02 k8s-master03 k8s-node01 k8s-node02;do ssh-copy-id -i .ssh/id_rsa.pub $i;done
安裝必要軟體並升級系統
yum install wget jq psmisc vim net-tools telnet -y
yum update -y --exclude=kernel* && reboot #CentOS7需要升級,8不需要
核心升級配置
CentOS7 需要升級核心至4.18+,本地升級的版本為4.19
在master01節點下載核心
cd /root
wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm
wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm
從master01節點傳到其他節點:
for i in k8s-master02 k8s-master03 k8s-node01 k8s-node02;do scp kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm $i:/root/ ; done
# 所有節點安裝核心
cd /root && yum localinstall -y kernel-ml*
# 所有節點更改核心啟動順序
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
# 檢查預設核心是不是4.19
[root@k8s-master02 ~]# grubby --default-kernel
/boot/vmlinuz-4.19.12-1.el7.elrepo.x86_64
# 所有節點重啟,然後檢查核心是不是4.19
[root@k8s-master02 ~]# uname -a
Linux k8s-master02 4.19.12-1.el7.elrepo.x86_64 #1 SMP Fri Dec 21 11:06:36 EST 2018 x86_64 x86_64 x86_64 GNU/Linux
所有節點安裝ipvsadm
yum install ipvsadm ipset sysstat conntrack libseccomp -y
所有節點配置ipvs模組,在核心4.19+版本nf_conntrack_ipv4已經改為nf_conntrack, 4.18以下使用nf_conntrack_ipv4即可:
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
vim /etc/modules-load.d/ipvs.conf
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
然後執行systemctl enable --now systemd-modules-load.service即可
開啟一些k8s叢集中必須的核心引數
cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF
sysctl --system
所有節點配置完核心後,重啟伺服器,保證重啟後核心載入
k8s基礎元件安裝
# 所有節點安裝Docker-ce 19.03
yum install docker-ce-19.03.* docker-cli-19.03.* -y
# 溫馨提示:
# 由於新版kubelet建議使用systemd,所以可以把docker的CgroupDriver改成systemd
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 所有節點設定開機自啟動Docker:
systemctl daemon-reload && systemctl enable --now docker
# 安裝k8s元件:
yum list kubeadm.x86_64 --showduplicates | sort -r
# 所有節點安裝最新版本kubeadm:
yum install kubeadm-1.20* kubelet-1.20* kubectl-1.20* -y
# 預設配置的pause映象使用gcr.io倉庫,國內可能無法訪問,所以這裡配置Kubelet使用阿里雲的pause映象:
cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2"
EOF
# 設定Kubelet開機自啟動:
systemctl daemon-reload
systemctl enable --now kubelet
kubeadm搭建故障問題
1. 新增刪除節點證書問題
1) 所需要被新增的節點,通過kubeadm reset 清空k8s環境
2) 清空cni外掛配置目錄
3) 清空iptables 規則
4) master節點,通過檢視新增證書命令,執行新增節點操作
kubeadm token create --print-join-command
2. 如何重新生成證書
kubeadm init phase upload-certs --upload-certs
檢視證書過期時間
kubeadm alpha certs check-expiration
安裝高可用元件
(注意:如果不是高可用叢集,haproxy和keepalived無需安裝)
公有云要用公有云自帶的負載均衡,比如阿里雲的SLB,騰訊雲的ELB,用來替代haproxy和keepalived,因為公有云大部分都是不支援keepalived的,另外如果用阿里雲的話,kubectl控制端不能放在master節點,推薦使用騰訊雲,因為阿里雲的slb有迴環的問題,也就是slb代理的伺服器不能反向訪問SLB,但是騰訊雲修復了這個問題。
# 所有Master節點通過yum安裝HAProxy和KeepAlived:
yum install keepalived haproxy -y
# 所有Master節點配置HAProxy(詳細配置參考HAProxy文件,所有Master節點的HAProxy配置相同):
[root@k8s-master01 etc]# mkdir /etc/haproxy
[root@k8s-master01 etc]# vim /etc/haproxy/haproxy.cfg
global
maxconn 2000
ulimit-n 16384
log 127.0.0.1 local0 err
stats timeout 30s
defaults
log global
mode http
option httplog
timeout connect 5000
timeout client 50000
timeout server 50000
timeout http-request 15s
timeout http-keep-alive 15s
frontend monitor-in
bind *:33305
mode http
option httplog
monitor-uri /monitor
frontend k8s-master
bind 0.0.0.0:16443
bind 127.0.0.1:16443
mode tcp
option tcplog
tcp-request inspect-delay 5s
default_backend k8s-master
backend k8s-master
mode tcp
option tcplog
option tcp-check
balance roundrobin
default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
server k8s-master01 192.168.0.71:6443 check
server k8s-master02 192.168.0.72:6443 check
server k8s-master03 192.168.0.73:6443 check
# 所有Master節點配置KeepAlived,配置不一樣,注意區分
[root@k8s-master01 pki]# vim /etc/keepalived/keepalived.conf
注意每個節點的IP和網絡卡(interface引數)
Master01節點的配置:
[root@k8s-master01 etc]# mkdir /etc/keepalived
[root@k8s-master01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script chk_apiserver {
script "/etc/keepalived/check_apiserver.sh"
interval 5
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
mcast_src_ip 192.168.0.71
virtual_router_id 51
priority 101
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress {
192.168.0.236
}
track_script {
chk_apiserver
}
}
Master02節點的配置:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script chk_apiserver {
script "/etc/keepalived/check_apiserver.sh"
interval 5
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
mcast_src_ip 192.168.0.72
virtual_router_id 51
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress {
192.168.0.236
}
track_script {
chk_apiserver
}
}
Master03節點的配置:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script chk_apiserver {
script "/etc/keepalived/check_apiserver.sh"
interval 5
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
mcast_src_ip 192.168.0.73
virtual_router_id 51
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress {
192.168.0.236
}
track_script {
chk_apiserver
}
}
所有master節點配置KeepAlived健康檢查檔案:
[root@k8s-master01 keepalived]# cat /etc/keepalived/check_apiserver.sh
#!/bin/bash
err=0
for k in $(seq 1 3)
do
check_code=$(pgrep haproxy)
if [[ $check_code == "" ]]; then
err=$(expr $err + 1)
sleep 1
continue
else
err=0
break
fi
done
if [[ $err != "0" ]]; then
echo "systemctl stop keepalived"
/usr/bin/systemctl stop keepalived
exit 1
else
exit 0
fi
chmod +x /etc/keepalived/check_apiserver.sh
啟動haproxy和keepalived
systemctl daemon-reload
systemctl enable --now haproxy
systemctl enable --now keepalived
kubeadm叢集初始化
#Master01節點建立kubeadm-config.yaml配置檔案如下:
Master01:(# 注意,如果不是高可用叢集,192.168.0.236:16443改為master01的地址,16443改為apiserver的埠,預設是6443,注意更改v1.18.5自己伺服器kubeadm的版本:kubeadm version)
##注意
# 以下檔案內容,宿主機網段、podSubnet網段、serviceSubnet網段不能重複,具體看課程資料的【安裝前必看】叢集安裝網段劃分
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: 7t2weq.bjbawausm0jaxury
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.0.71
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: k8s-master01
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
certSANs:
- 192.168.0.236
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 192.168.0.236:16443
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.0
networking:
dnsDomain: cluster.local
podSubnet: 172.16.0.0/12
serviceSubnet: 10.96.0.0/12
scheduler: {}
更新kubeadm檔案
kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml
#將new.yaml檔案複製到其他master節點,之後所有Master節點提前下載映象,可以節省初始化時間:
kubeadm config images pull --config /root/new.yaml
#所有節點設定開機自啟動kubelet
systemctl enable --now kubelet(如果啟動失敗無需管理,初始化成功以後即可啟動)
#Master01節點初始化,初始化以後會在/etc/kubernetes目錄下生成對應的證書和配置檔案,之後其他Master節#點加入Master01即可:
kubeadm init --config /root/new.yaml --upload-certs
#如果初始化失敗,重置後再次初始化,命令如下:
kubeadm reset -f ; ipvsadm --clear ; rm -rf ~/.kube
#初始化成功以後,會產生Token值,用於其他節點加入時使用,因此要記錄下初始化成功生成的token值(令牌值):
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of the control-plane node running the following command on each as root:
kubeadm join 192.168.0.236:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:8c92ecb336be2b9372851a9af2c7ca1f7f60c12c68f6ffe1eb513791a1b8a908 \
--control-plane --certificate-key ac2854de93aaabdf6dc440322d4846fc230b290c818c32d6ea2e500fc930b0aa
Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.0.236:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:8c92ecb336be2b9372851a9af2c7ca1f7f60c12c68f6ffe1eb513791a1b8a908
# Master01節點配置環境變數,用於訪問Kubernetes叢集:
cat <<EOF >> /root/.bashrc
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
source /root/.bashrc
#所有節點設定開機自啟動kubelet
systemctl enable --now kubelet(如果啟動失敗無需管理,初始化成功以後即可啟動)
# 檢視節點狀態:
[root@k8s-master01 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 NotReady control-plane,master 74s v1.20.0
採用初始化安裝方式,所有的系統元件均以容器的方式執行並且在kube-system名稱空間內,此時可以檢視Pod狀態:
叢集擴容新增新節點
若token過期需,先生成新的token及證書
kubeadm token create --print-join-command
kubeadm init phase upload-certs --upload-certs
擴容計算節點需要同時制定token與證書,擴容
kubeadm join 192.168.0.236:16443 --token s5jvof.yzdwwx1qiljteygg --discovery-token-ca-cert-hash sha256:94e36738492df5e652fd1d1c0967accfab62e7ae682342e60f467854de8aa1b0 --control-plane --certificate-key7b1d1b14cccba42df1e6caad6f050e41e8d817626917e86f3c5e6a1d1ab9c738
安裝Calico元件
修改calico-etcd.yaml配置檔案
sed -i 's#etcd_endpoints: "http://<ETCD_IP>:<ETCD_PORT>"#etcd_endpoints: "https://192.168.0.71:2379,https://192.168.0.72:2379,https://192.168.0.73:2379"#g' calico-etcd.yaml
ETCD_CA=`cat /etc/kubernetes/pki/etcd/ca.crt | base64 | tr -d '\n'`
ETCD_CERT=`cat /etc/kubernetes/pki/etcd/server.crt | base64 | tr -d '\n'`
ETCD_KEY=`cat /etc/kubernetes/pki/etcd/server.key | base64 | tr -d '\n'`
sed -i "s@# etcd-key: null@etcd-key: ${ETCD_KEY}@g; s@# etcd-cert: null@etcd-cert: ${ETCD_CERT}@g; s@# etcd-ca: null@etcd-ca: ${ETCD_CA}@g" calico-etcd.yaml
sed -i 's#etcd_ca: ""#etcd_ca: "/calico-secrets/etcd-ca"#g; s#etcd_cert: ""#etcd_cert: "/calico-secrets/etcd-cert"#g; s#etcd_key: "" #etcd_key: "/calico-secrets/etcd-key" #g' calico-etcd.yaml
POD_SUBNET=`cat /etc/kubernetes/manifests/kube-controller-manager.yaml | grep cluster-cidr= | awk -F= '{print $NF}'`
kubectl apply -f calico-etcd.yaml
部署mertics及dashboard
將Master01節點的front-proxy-ca.crt複製到所有Node節點
scp /etc/kubernetes/pki/front-proxy-ca.crt k8s-node01:/etc/kubernetes/pki/front-proxy-ca.crt
scp /etc/kubernetes/pki/front-proxy-ca.crt k8s-node(其他節點自行拷貝):/etc/kubernetes/pki/front-proxy-ca.crt
安裝metrics server
cd /root/k8s-ha-install/metrics-server-0.4.x-kubeadm/
[root@k8s-master01 metrics-server-0.4.x-kubeadm]# kubectl create -f comp.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
檢視狀態
[root@k8s-master01 metrics-server-0.4.x-kubeadm]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master01 109m 2% 1296Mi 33%
k8s-master02 99m 2% 1124Mi 29%
k8s-master03 104m 2% 1082Mi 28%
k8s-node01 55m 1% 761Mi 19%
k8s-node02 53m 1% 663Mi 17%
部署dashboard
cd /root/k8s-ha-install/dashboard/
[root@k8s-master01 dashboard]# kubectl create -f .
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
更改dashboard的svc為NodePort:
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
將ClusterIP更改為NodePort(如果已經為NodePort忽略此步驟):
檢視埠號:
kubectl get svc kubernetes-dashboard -n kubernetes-dashboard
根據自己的例項埠號,通過任意安裝了kube-proxy的宿主機或者VIP的IP+埠即可訪問到dashboard:
訪問Dashboard:https://192.168.0.236:18282(請更改18282為自己的埠),選擇登入方式為令牌(即token方式),參考圖1-2
檢視token登入即可
一些必須的配置更改
將Kube-proxy改為ipvs模式,因為在初始化叢集的時候註釋了ipvs配置,所以需要自行修改一下:
在master01節點執行
kubectl edit cm kube-proxy -n kube-system
mode: “ipvs”
更新Kube-Proxy的Pod:
kubectl patch daemonset kube-proxy -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}" -n kube-system
驗證Kube-Proxy模式
[root@k8s-master01 1.1.1]# curl 127.0.0.1:10249/proxyMode
ipvs