基于kubeadm和cri-dockerd使用docker运行时部署K8S 集群
部署环境操作系统: ubuntu 22.04.x/ubuntu 24.04.x
LB:
172.31.7.109
172.31.7.110
VIP: 172.31.7.118
master/etcd节点(etcd与master节点复用):
k8s-master1 172.31.7.101
k8s-master2 172.31.7.102
k8s-master3 172.31.7.103
worker/node 节点:
k8s-node1 172.31.7.111
k8s-node2 172.31.7.112
k8s-node3 172.31.7.113
Image Registry(Harbor):
172.31.7.104root@k8s-ha1:~# apt install keepalived haproxy
root@k8s-ha1:~# cd /etc/keepalived/
root@k8s-ha1:/etc/keepalived# cat keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.31.7.188 dev eth0 label eth0:1
172.31.7.189 dev eth0 label eth0:2
172.31.7.190 dev eth0 label eth0:3
172.31.7.191 dev eth0 label eth0:4
}
root@k8s-ha1:/etc/keepalived# systemctl restart keepalived.service
root@k8s-ha1:/etc/keepalived# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.7.109 netmask 255.255.248.0 broadcast 172.31.7.255
inet6 fe80::20c:29ff:fe80:e083 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:80:e0:83 txqueuelen 1000 (Ethernet)
RX packets 700 bytes 79229 (79.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 427 bytes 84331 (84.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.7.188 netmask 255.255.255.255 broadcast 0.0.0.0
ether 00:0c:29:80:e0:83 txqueuelen 1000 (Ethernet)
eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.7.189 netmask 255.255.255.255 broadcast 0.0.0.0
ether 00:0c:29:80:e0:83 txqueuelen 1000 (Ethernet)
eth0:3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.7.190 netmask 255.255.255.255 broadcast 0.0.0.0
ether 00:0c:29:80:e0:83 txqueuelen 1000 (Ethernet)
eth0:4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.7.191 netmask 255.255.255.255 broadcast 0.0.0.0
ether 00:0c:29:80:e0:83 txqueuelen 1000 (Ethernet)
#HAProxy 配置
root@k8s-ha1:~# cd /etc/haproxy/
root@k8s-ha1:/etc/haproxy# cat haproxy.cfg
listen k8s-6443
bind 172.31.7.188:6443
mode tcp
server server1 172.31.7.101:6443 check inter 3s rise 3 fall 3
root@k8s-ha1:/etc/haproxy# systemctl restart haproxy.service 各master节点及node节点安装docker:
root@k8s-master1:/usr/local/src# tar xvf runtime-docker_24.0.9-containerd_1.7.20-binary-install.tar.gz
root@k8s-master1:/usr/local/src# bash runtime-install.sh docker
root@k8s-master2:/usr/local/src# runtime-docker_24.0.9-containerd_1.7.20-binary-install.tar.gz
root@k8s-master2:/usr/local/src# bash runtime-install.sh docker
root@k8s-master3:/usr/local/src# runtime-docker_24.0.9-containerd_1.7.20-binary-install.tar.gz
root@k8s-master3:/usr/local/src# bash runtime-install.sh docker
root@k8s-node1:/usr/local/src# tar xvf tar xvf runtime-docker24.0.2-containerd1.6.21-binary-install.tar.gz
root@k8s-node1:/usr/local/src# bash runtime-install.sh docker
root@k8s-node2:/usr/local/src# tar xvf tar xvf runtime-docker24.0.2-containerd1.6.21-binary-install.tar.gz
root@k8s-node2:/usr/local/src# bash runtime-install.sh docker
root@k8s-node3:/usr/local/src# tar xvf tar xvf runtime-docker24.0.2-containerd1.6.21-binary-install.tar.gz
root@k8s-node3:/usr/local/src# bash runtime-install.sh docker
#各节点自定义containerd中初始化镜像和Cgroup配置:
root@k8s-master1:~# mkdir /etc/containerd
root@k8s-master1:~# containerd config default > /etc/containerd/config.toml
root@k8s-master1:~# vim /etc/containerd/config.toml
65 sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"
137 SystemdCgroup = true
root@k8s-master1:~# scp /etc/containerd/config.toml 172.31.7.102:/etc/containerd/config.toml
root@k8s-master1:~# scp /etc/containerd/config.toml 172.31.7.103:/etc/containerd/config.toml
root@k8s-master1:~# scp /etc/containerd/config.toml 172.31.7.111:/etc/containerd/config.toml
root@k8s-master1:~# scp /etc/containerd/config.toml 172.31.7.112:/etc/containerd/config.toml
root@k8s-master1:~# scp /etc/containerd/config.toml 172.31.7.113:/etc/containerd/config.tomlroot@k8s-master1:~# tar xvf cri-dockerd-0.3.15.amd64.tgz
cri-dockerd/
cri-dockerd/cri-dockerd
root@k8s-master1:~# cp cri-dockerd/cri-dockerd /usr/local/bin/
root@k8s-master1:~# cat > /etc/systemd/system/cri-dockerd.service<<"EOF"
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-dockerd.socket
[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
root@k8s-master1:~# cat > /etc/systemd/system/cri-dockerd.socket <<"EOF"
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-dockerd.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
root@k8s-master1:~# systemctl daemon-reload && systemctl enable cri-dockerd.service && systemctl enable cri-dockerd.socket && systemctl status cri-dockerd.service
root@k8s-master1:~# scp /usr/local/bin/cri-dockerd 172.31.7.102:/usr/local/bin/
root@k8s-master1:~# scp /usr/local/bin/cri-dockerd 172.31.7.103:/usr/local/bin/
root@k8s-master1:~# scp /usr/local/bin/cri-dockerd 172.31.7.111:/usr/local/bin/
root@k8s-master1:~# scp /usr/local/bin/cri-dockerd 172.31.7.112:/usr/local/bin/
root@k8s-master1:~# scp /usr/local/bin/cri-dockerd 172.31.7.113:/usr/local/bin/
root@k8s-master1:~# scp /etc/systemd/system/cri-dockerd.service /etc/systemd/system/cri-dockerd.socket 172.31.7.102:/etc/systemd/system
root@k8s-master1:~# scp /etc/systemd/system/cri-dockerd.service /etc/systemd/system/cri-dockerd.socket 172.31.7.103:/etc/systemd/system
root@k8s-master1:~# scp /etc/systemd/system/cri-dockerd.service /etc/systemd/system/cri-dockerd.socket 172.31.7.111:/etc/systemd/system
root@k8s-master1:~# scp /etc/systemd/system/cri-dockerd.service /etc/systemd/system/cri-dockerd.socket 172.31.7.112:/etc/systemd/system
root@k8s-master1:~# scp /etc/systemd/system/cri-dockerd.service /etc/systemd/system/cri-dockerd.socket 172.31.7.113:/etc/systemd/system
root@k8s-master2:~# systemctl daemon-reload && systemctl enable cri-dockerd.service && systemctl enable cri-dockerd.socket && systemctl status cri-dockerd.service
root@k8s-master3:~# systemctl daemon-reload && systemctl enable cri-dockerd.service && systemctl enable cri-dockerd.socket && systemctl status cri-dockerd.service
root@k8s-node1:~# systemctl daemon-reload && systemctl enable cri-dockerd.service && systemctl enable cri-dockerd.socket && systemctl status cri-dockerd.service
root@k8s-node2:~# systemctl daemon-reload && systemctl enable cri-dockerd.service && systemctl enable cri-dockerd.socket && systemctl status cri-dockerd.service
root@k8s-node3:~# systemctl daemon-reload && systemctl enable cri-dockerd.service && systemctl enable cri-dockerd.socket && systemctl status cri-dockerd.service各master与node安装kubeadm与kubelet、在需要执行kubectl 命令行管理命令的节点安装kubectl
https://mirrors.aliyun.com/kubernetes-new/core/stable/ #当前支持的版本
各master与node节点:
#安装apt-transport-https支持https仓库
root@k8s-master1:~# apt-get update && apt-get install -y apt-transport-https
#导入GPG证书、目前各版本的GPG证书通用的
root@k8s-master1:~# curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key |
gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
#添加指定版本的kubernetes apt源
root@k8s-master1:~# echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" |
tee /etc/apt/sources.list.d/kubernetes.list
#更新apt源
root@k8s-master1:~# apt update
#验证版本
root@k8s-master1:~# apt-cache madison kubeadm
kubeadm | 1.30.4-1.1 | https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb Packages
kubeadm | 1.30.3-1.1 | https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb Packages
kubeadm | 1.30.2-1.1 | https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb Packages
kubeadm | 1.30.1-1.1 | https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb Packages
kubeadm | 1.30.0-1.1 | https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb Packages
#执行安装
root@k8s-master1:~# apt-get install -y kubeadm=1.30.1-1.1 kubectl=1.30.1-1.1 kubelet=1.30.1-1.1
root@k8s-master2:~# apt-get install -y kubeadm=1.30.1-1.1 kubectl=1.30.1-1.1 kubelet=1.30.1-1.1
root@k8s-master3:~# apt-get install -y kubeadm=1.30.1-1.1 kubectl=1.30.1-1.1 kubelet=1.30.1-1.1
root@k8s-node1:~# apt-get install -y kubeadm=1.30.1-1.1 kubectl=1.30.1-1.1 kubelet=1.30.1-1.1
root@k8s-node2:~# apt-get install -y kubeadm=1.30.1-1.1 kubectl=1.30.1-1.1 kubelet=1.30.1-1.1
root@k8s-node3:~# apt-get install -y kubeadm=1.30.1-1.1 kubectl=1.30.1-1.1 kubelet=1.30.1-1.1root@k8s-master1:~# kubeadm config images list --kubernetes-version v1.30.1
registry.k8s.io/kube-apiserver:v1.30.1
registry.k8s.io/kube-controller-manager:v1.30.1
registry.k8s.io/kube-scheduler:v1.30.1
registry.k8s.io/kube-proxy:v1.30.1
registry.k8s.io/coredns/coredns:v1.11.1
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.12-0
#替换镜像仓库下载容器镜像
root@k8s-master2:~# kubeadm config images pull --kubernetes-version v1.30.1 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --cri-socket /var/run/cri-dockerd.sock #直接下载镜像或使用下一步骤的脚本下载、不指定--cri-socket 会使用containerd
root@k8s-master1:~# cat image-down.sh
#!/bin/bash
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.30.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.30.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.30.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.30.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.12-0
root@k8s-master1:~# bash image-download.sh root@k8s-master1:~# cat /etc/sysctl.conf
###################################################################
net.ipv4.ip_forward=1
vm.max_map_count=262144
kernel.pid_max=4194303
fs.file-max=1000000
net.ipv4.tcp_max_tw_buckets=6000
net.netfilter.nf_conntrack_max=2097152
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
内核模块开机挂载:
root@k8s-master1:~# vim /etc/modules-load.d/modules.conf
ip_vs
ip_vs_lc
ip_vs_lblc
ip_vs_lblcr
ip_vs_rr
ip_vs_wrr
ip_vs_sh
ip_vs_dh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
ip_tables
ip_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
xt_set
br_netfilter
nf_conntrack
overlay
#各节点重启后验证内核模块与内存参数:
root@k8s-master1:~# reboot
root@k8s-master1:~# lsmod | grep br_netfilter
br_netfilter 32768 0
bridge 307200 1 br_netfilter
root@k8s-master1:~# sysctl -a | grep bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1#如开启swap分区的报错 command failed" err="failed to run Kubelet: running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false
#配置 kubelet 的 cgroup 驱动
kubeadm 支持在执行 kubeadm init 时,传递一个 KubeletConfiguration 结构体。 KubeletConfiguration 包含 cgroupDriver 字段,可用于控制 kubelet 的 cgroup 驱动。
这是一个最小化的cgroup使用systemd的配置示例,其中显式的配置了此字段:
# kubeadm-config.yaml
kind: ClusterConfiguration
apiVersion: kubeadm.k8s.io/v1beta3
kubernetesVersion: v1.21.0
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd#单master
# kubeadm init --apiserver-advertise-address=172.31.7.201 --apiserver-bind-port=6443 --kubernetes-version=v1.30.1 --pod-network-cidr=10.200.0.0/16 --service-cidr=10.100.0.0/16 --service-dns-domain=cluster.local --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --ignore-preflight-errors=swap
#多master
# kubeadm init --apiserver-advertise-address=172.31.7.201 --control-plane-endpoint=172.31.7.188 --apiserver-bind-port=6443 --kubernetes-version=v1.30.1 --pod-network-cidr=10.200.0.0/16 --service-cidr=10.100.0.0/16 --service-dns-domain=cluster.local --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --ignore-preflight-errors=swaproot@k8s-master1:~# kubeadm config print init-defaults #输出默认初始化配置
root@k8s-master1:~# kubeadm config print init-defaults > kubeadm-init.yaml #将默认配置输出至文件
root@k8s-master1:~# vim kubeadm-init.yaml #修改后的初始化文件内容
root@k8s-master1:~# cat kubeadm-init.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: 172.31.7.101
bindPort: 6443
nodeRegistration:
#criSocket: unix:///var/run/containerd/containerd.sock #k8S v1.24开始默认使用containerd
criSocket: unix:///var/run/cri-dockerd.sock #如果k8S v1.24及新版本还要使用docker则需要使用cri-dockerd转发一次
imagePullPolicy: IfNotPresent
name: k8s-master1.example.com
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 172.31.7.188:6443 ##负载均衡VIP地址及端口,必须提前配置好
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #镜像仓库
kind: ClusterConfiguration
kubernetesVersion: 1.30.1
networking:
networking:
dnsDomain: cluster.local #service 域名后缀
podSubnet: 10.200.0.0/16 #pod子网范围
serviceSubnet: 10.100.0.0/16 #service子网范围
scheduler: {}
--- #指定kubelet使用systemd
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd
--- #指定KubeProxy使用ipvs
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvsroot@k8s-master1:~# kubeadm init --config kubeadm-init.yaml
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 control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
kubeadm join 172.31.7.188:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:5d6123bbffea4230c2280b71a60ae36a220e65dc97ef6737bde13c50d4f58111 \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 172.31.7.188:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:5d6123bbffea4230c2280b71a60ae36a220e65dc97ef6737bde13c50d4f58111可以使用docker命令查看当前节点上运行的容器状态
添加node与master节点到当前K8S环境
添加node节点指定使用cri-docker、如果不指定、默认使用的是containerd
root@k8s-node1:~# kubeadm join 172.31.7.188:6443 --token abcdef.0123456789abcdef --cri-socket unix:///var/run/cri-dockerd.sock \
--discovery-token-ca-cert-hash sha256:5d6123bbffea4230c2280b71a60ae36a220e65dc97ef6737bde13c50d4f58111
root@k8s-node2:~# kubeadm join 172.31.7.188:6443 --token abcdef.0123456789abcdef --cri-socket unix:///var/run/cri-dockerd.sock \
--discovery-token-ca-cert-hash sha256:5d6123bbffea4230c2280b71a60ae36a220e65dc97ef6737bde13c50d4f58111
root@k8s-node2:~# kubeadm join 172.31.7.188:6443 --token abcdef.0123456789abcdef --cri-socket unix:///var/run/cri-dockerd.sock \
--discovery-token-ca-cert-hash sha256:5d6123bbffea4230c2280b71a60ae36a220e65dc97ef6737bde13c50d4f58111添加master并指定使用cri-dockerd,如果不指定默认使用的是containerd
#当前maste生成证书用于添加新控制节点:
root@k8s-master1:~# kubeadm init phase upload-certs --upload-certs
W0910 16:05:05.780066 5687 version.go:104] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get "https://cdn.dl.k8s.io/release/stable-1.txt": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
W0910 16:05:05.780154 5687 version.go:105] falling back to the local client version: v1.30.1
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
23c70979fe4841ee05e7725ce22782b1d1210578ced5a6b5279f8af464d613be
#添加master2
root@k8s-master2:~# kubeadm join 172.31.7.188:6443 --token abcdef.0123456789abcdef --cri-socket unix:///var/run/cri-dockerd.sock \
--discovery-token-ca-cert-hash sha256:5d6123bbffea4230c2280b71a60ae36a220e65dc97ef6737bde13c50d4f58111 \
--control-plane --certificate-key 23c70979fe4841ee05e7725ce22782b1d1210578ced5a6b5279f8af464d613be
#添加master3
root@k8s-master3:~# kubeadm join 172.31.7.188:6443 --token abcdef.0123456789abcdef --cri-socket unix:///var/run/cri-dockerd.sock \
--discovery-token-ca-cert-hash sha256:5d6123bbffea4230c2280b71a60ae36a220e65dc97ef6737bde13c50d4f58111 \
--control-plane --certificate-key 23c70979fe4841ee05e7725ce22782b1d1210578ced5a6b5279f8af464d613be目前网络组件还未部署,节点状态会显示为NotReady
root@k8s-master1:~# kubectl get node
NAME STATUS ROLES AGE VERSION
NAME STATUS ROLES AGE VERSION
k8s-master1.example.com NotReady control-plane 5m58s v1.30.1
k8s-master2.example.com NotReady control-plane 26s v1.30.1
k8s-master3.example.com NotReady control-plane 7s v1.30.1
k8s-node1.example.com NotReady <none> 112s v1.30.1
k8s-node2.example.com NotReady <none> 114s v1.30.1
k8s-node3.example.com NotReady <none> 117s v1.30.1查看kube-controller-manager与kube-scheduler的leader信息
root@k8s-master1:~# kubectl get leases -n kube-system
NAME HOLDER AGE
apiserver-dlnbhm5sbbuwjt5xaedlm2fzza apiserver-dlnbhm5sbbuwjt5xaedlm2fzza_eb61ed4e-4c43-467c-bf10-064ed75db3ed 34s
apiserver-hitiscauk7soymvii3ujfifa5q apiserver-hitiscauk7soymvii3ujfifa5q_b35516d9-822b-4836-847e-b18127418d48 6m22s
apiserver-lh7qshte2k5rxulkkzgtdydcaa apiserver-lh7qshte2k5rxulkkzgtdydcaa_7ac9ac77-957c-4696-9209-95938307fc98 16s
kube-controller-manager k8s-master1.example.com_7788db0c-c640-4cac-bab3-f44d9d79c5d5 6m20s
kube-scheduler k8s-master1.example.com_881440c7-f312-4da8-97ea-bd819cbaa072 6m18sFlannel: https://github.com/flannel-io/flannel
Calico: https://docs.tigera.io/calico/latest/getting-started/kubernetes/requirements
root@k8s-master1:~# kubectl apply -f calico_v3.28.1-k8s_1.29.8-ubuntu2404.yaml
poddisruptionbudget.policy/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
serviceaccount/calico-node created
serviceaccount/calico-cni-plugin created
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgpfilters.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrole.rbac.authorization.k8s.io/calico-cni-plugin created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-cni-plugin created
daemonset.apps/calico-node created
deployment.apps/calico-kube-controllers createdroot@k8s-master1:~# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-5b7555dd59-6bxtk 1/1 Running 0 8m7s
calico-node-6vddc 1/1 Running 0 8m7s
calico-node-94tgg 1/1 Running 0 8m7s
calico-node-bkmqr 1/1 Running 0 8m7s
calico-node-bpd74 1/1 Running 0 8m7s
calico-node-h2lww 1/1 Running 0 8m7s
calico-node-lm8rx 1/1 Running 0 8m7s
coredns-7c445c467-ph88c 1/1 Running 0 14m
coredns-7c445c467-qw44j 1/1 Running 0 14m
etcd-k8s-master1.example.com 1/1 Running 0 15m
etcd-k8s-master2.example.com 1/1 Running 0 9m30s
etcd-k8s-master3.example.com 1/1 Running 0 9m11s
kube-apiserver-k8s-master1.example.com 1/1 Running 0 15m
kube-apiserver-k8s-master2.example.com 1/1 Running 0 9m28s
kube-apiserver-k8s-master3.example.com 1/1 Running 0 9m9s
kube-controller-manager-k8s-master1.example.com 1/1 Running 0 15m
kube-controller-manager-k8s-master2.example.com 1/1 Running 0 9m28s
kube-controller-manager-k8s-master3.example.com 1/1 Running 0 9m11s
kube-proxy-5tfv6 1/1 Running 0 14m
kube-proxy-cchbz 1/1 Running 0 9m31s
kube-proxy-czn7v 1/1 Running 0 10m
kube-proxy-g9jlh 1/1 Running 0 11m
kube-proxy-hbgbq 1/1 Running 0 9m12s
kube-proxy-sfr54 1/1 Running 0 10m
kube-scheduler-k8s-master1.example.com 1/1 Running 0 15m
kube-scheduler-k8s-master2.example.com 1/1 Running 0 9m31s
kube-scheduler-k8s-master3.example.com 1/1 Running 0 9m9sroot@k8s-master1:~# cd nginx-tomcat-case/
root@k8s-master1:~/nginx-tomcat-case# kubectl apply -f myserver-namespace.yaml
namespace/myserver created
root@k8s-master1:~/nginx-tomcat-case# kubectl apply -f tomcat.yaml
deployment.apps/myserver-tomcat-app1-deployment created
service/myserver-tomcat-app1-service created
root@k8s-master1:~/nginx-tomcat-case# kubectl apply -f nginx.yaml
deployment.apps/myserver-nginx-deployment created
service/myserver-nginx-service createdroot@k8s-master1:~/nginx-tomcat-case# kubectl get pod -n myserver
NAME READY STATUS RESTARTS AGE
myserver-nginx-deployment-5668cf768b-6p255 1/1 Running 0 60s
myserver-tomcat-app1-deployment-78bf755869-blgnz 1/1 Running 0 64s
root@k8s-master1:~/nginx-tomcat-case#
root@k8s-master1:~/nginx-tomcat-case# kubectl get svc -n myserver
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myserver-nginx-service NodePort 10.100.236.238 <none> 80:30004/TCP,443:30443/TCP 64s
myserver-tomcat-app1-service NodePort 10.100.86.202 <none> 80:30005/TCP 68s可选组件、非必须
https://github.com/kubernetes/dashboard
root@k8s-master1:~# cd dashboard-v2.7.0/
root@k8s-master1:~/dashboard-v2.7.0# kubectl apply -f dashboard-v2.7.0.yaml -f admin-user.yaml -f admin-secret.yaml
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
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
secret/dashboard-admin-user created
root@k8s-master1:~/dashboard-v2.7.0# kubectl apply -f metrics-server-v0.7.1.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 createdroot@k8s-master1:~/dashboard-v2.7.0# kubectl get pod -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-77d58f5579-bqrm2 1/1 Running 0 23s
kubernetes-dashboard-56d5d4fdd9-7krmr 1/1 Running 0 23sroot@k8s-master1:~# kubectl get secret -A | grep admin
kubernetes-dashboard dashboard-admin-user kubernetes.io/service-account-token 3 109s
root@k8s-master1:~# kubectl describe secret -n kubernetes-dashboard dashboard-admin-user
Name: dashboard-admin-user
Namespace: kubernetes-dashboard
Labels: <none>
Annotations: kubernetes.io/service-account.name: admin-user
kubernetes.io/service-account.uid: 17876304-89b5-44d1-8b4d-d73d2168c741
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1107 bytes
namespace: 20 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImNfTDRhbk1LcnR0RkpmcFItN0lRMkp1elk5bHpfRElGWWtScFBJQy1UVncifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdXNlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbi11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMTc4NzYzMDQtODliNS00NGQxLThiNGQtZDczZDIxNjhjNzQxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmFkbWluLXVzZXIifQ.FDXUXZ_q0f9AZ1p599B8jv5igz_lTVONDgnQBnu8srDwQuDu-yzxmOMZyO0R2hq5OdV49Swkt9kfDk2vzhrchsfK84S8_m6c3cuPOXrlrsNd2P65Dw_f2lqnzYVRknsuHgxXzjIyhwiWJOvngYqKw-kqE63pjh6kIopBYdEtmuWkTBSABYX6UV-pI9obOz5MYaA-M7xaO3Z-LUksqVbw-TxF2_hh30DXMb9KohYpsfbykCYnz8KvsDaEZx6gwYcwe90Bejy4tJ7NmS0PGcxEfY40IIuDxyPTTTOG26A62tAXehT5rLDw7jmQINMyrHJBA_pcDwndgyCdHMZE_Q5zhw浏览器使用https访问任意一个node节点IP+30000端口,端口可以在部署的 yaml文件中自定义修改
#以下CPU和内存使用图形需要部署了metrics-server组件才会显示:








