最新 Kubernetes 集群部署 + Contranerd容器运行时 + flannel 网络插件(保姆级教程,最新 K8S 1.28.2 版本)

news2024/9/19 10:57:12

资源列表

操作系统配置主机名IP所需插件
CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictl
CentOS 7.92C4Gk8s-node01192.168.60.144flannel-cni-plugin、flannel、kubectl、kube-proxy、containerd、pause 、crictl、kubernetes-dashboard
CentOS 7.92C4Gk8s-node02192.168.60.145flannel-cni-plugin、flannel、kubectl、kube-proxy、containerd、pause 、crictl、kubernetes-dashboard

各服务版本

  • flannel-cni-plugin:v1.1.2
  • flannel:v0.21.5
  • coredns:v1.10.1
  • etcd:3.5.9-0
  • kube-apiserver:v1.28.0
  • kube-controller-manager:v1.28.0
  • kube-proxy:v1.28.0
  • kube-scheduler:v1.28.0
  • pause:3.9
  • containerd:1.6.33-3.1.el7
  • crictl:1.6.33

1 环境准备(三台机器均需执行)

1.1 分别修改各个主机名称

## master:192.168.60.143
$ hostnamectl --static set-hostname k8s-master
## master:192.168.60.144
$ hostnamectl --static set-hostname k8s-node1
## master:192.168.60.145
$ hostnamectl --static set-hostname k8s-node2

## 执行以上操作后,再重启服务器
$ reboot -f

1.2 关闭防火墙和禁用 selinux

## 禁用selinux,关闭内核安全机制
$ sudo sestatus && sudo  setenforce 0 && sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

## 关闭防火墙,并禁止自启动
$ sudo systemctl stop firewalld && sudo systemctl disable firewalld && sudo systemctl status firewalld

1.3 关闭交换分区

  • kubeadm不支持swap
# 临时关闭
$ sudo swapoff -a

# 永久关闭
$ sudo sed -i '/swap/s/^/#/' /etc/fstab

1.4 集群机器均绑定 hostname

$ cat >> /etc/hosts << EOF
192.168.60.143 k8s-master
192.168.93.144 k8s-node01
192.168.93.145 k8s-node02
EOF

1.5 服务器内核优化

  • 在Docker的使用过程中有时会看到下面这个警告信息,做以下操作即可:
    • WARNING: bridge-nf-call-iptables is disabled
    • WARNING: bridge-nf-call-ip6tables is disabled
# 这种镜像信息可以通过配置内核参数的方式来消除
$ cat >> /etc/sysctl.conf << EOF
# 启用ipv6桥接转发
net.bridge.bridge-nf-call-ip6tables = 1
# 启用ipv4桥接转发
net.bridge.bridge-nf-call-iptables = 1
# 开启路由转发功能
net.ipv4.ip_forward = 1
# 禁用swap分区
vm.swappiness = 0
EOF

## # 加载 overlay 内核模块
$ modprobe overlay

# 往内核中加载 br_netfilter模块
$ modprobe br_netfilter

# 加载文件内容
$ sysctl -p

1.6 设置 CenOS 基础 yum 源,安装必要命令插件

$ sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
$ sudo yum makecache 
$ sudo yum -y install vim lrzsz unzip wget net-tools tree bash-completion telnet

1.7 各节点时间同步

## 安装同步时间插件
$ yum -y install ntpdate

## 同步阿里云的时间
$ ntpdate ntp.aliyun.com

2 Containerd 环境部署(三台机器均需执行)

  • 本文使用的是Containerd,镜像操作是 crictl 和 ctr 命令行;
  • 顺便说一下,k8s 是 1.20 版本开始宣布即将取消 docker 作为默认部署容器,一直到 1.24 版本才正式取消。所以安装的时候一定要注意 k8s 版本 和 容器之间的差异 。
  • 以下是官网关于容器支持的通知(官网中文版的没有这段话,只有英文版本才有,很NT):

在这里插入图片描述

2.1 安装Containerd

## 添加 docker 源,containerd也在docker源内的
$ cat <<EOF | sudo tee /etc/yum.repos.d/docker-ce.repo
[docker]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF

## 快速建立 yum 元数据库
$ yum makecache fast

# 安装containerd
# 列出所有containerd版本
$ yum list containerd.io --showduplicates
$ yum -y install containerd.io-1.6.33-3.1.el7.x86_64

2.2 配置 Containerd

$ mkdir -p /etc/containerd
$ containerd config default | sudo tee /etc/containerd/config.toml

## # 修改/etc/containerd/config.toml文件中sandbox_image的值,改为国内源
$ vi /etc/containerd/config.toml

1 ) 设置 sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
2 )[plugins."io.containerd.grpc.v1.cri".registry.mirrors] 后面新增以下两行内容,大概在 153 行左右
	[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
  	  endpoint = ["https://i9h06ghu.mirror.aliyuncs.com"]

## 启动 Containerd ,并设置开机自启动
$ systemctl start containerd && systemctl enable containerd

3 配置 crictl 工具(三台机器均需执行)

  • crictl 是 CRI 兼容的容器运行时命令行接口。你可以使用它来检查和调试Kubernetes节点上的容器运行时和应用程序。crictl 和它的源代码在cri-tools 代码库;
  • 更新到 Containerd 后,之前我们常用的docker命令也不再使用了,取而代之恶的分别是 crictl 和 ctr 两个命令行客户端;
  • crictl 是遵循 CRI 接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器运行时和镜像;
  • ctr 是 containerd 的一个客户端工具;

3.1 配置 crictl 配置文件

$ cat << EOF >> /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10 
debug: false
EOF

3.2 测试 crictl 工具是否可用

# 拉取一个 Nginx 镜像验证 crictl 是否可用
$ crictl pull nginx:latest

Image is up to date for sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85

# 查看 nginx 镜像
$ crictl images | grep nginx

IMAGE                     TAG                 IMAGE ID            SIZE
docker.io/library/nginx   latest              605c77e624ddb       56.7MB

4 部署Kubernetes集群(具体在哪些服务器操作,下文副标题都有注明)

4.1 配置 kubernetes 的 yum 源(三台机器均需执行)

$ sudo 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

4.2 安装Kubernetes基础服务及工具(三台机器均需执行)

  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。
## 安装所需 Kubernetes 必要插件
## $ yum install -y kubelet kubeadm kubectl
$ yum install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2
$ systemctl start kubelet && systemctl enable kubelet

4.3 master节点生成初始化配置文件(master节点执行)

  • Kubeadm提供了很多配置项,kubeadm配置在kubernetes集群中是存储在ConfigMap中的,也可将这些配置写入配置文件,方便管理复杂的配置项。kubeadm配置内容是通过kubeadm config命令写入配置文件的
    • kubeadm config view:查看当前集群中的配置值
    • kubeadm config print join-defaults:输出kubeadm join默认参数文件的内容
    • kubeadm config images list:列出所需的镜像列表
    • kubeadm config images pull:拉取镜像到本地
    • kubeadm config upload from-flags:由配置参数生成ConfigMap
# 生成初始化配置文件,并输出到当前目录
$ kubeadm config print init-defaults > init-config.yaml
# 执行上面的命令可能会出现类似这个提示,不用管,接着往下执行即可:W0615 08:50:40.154637   10202 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]

# 编辑配置文件,以下有需要修改部分
$ vi init-config.yaml

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.60.143   # 修改此处为你 master 节点 IP 地址,我的是 192.168.60.143
  bindPort: 6443	# 默认端口号即可
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master    # 修改此处为你主节点的主机名,我的是 k8s-master
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd    # 默认路径即可,etcd容器挂载到本地的目录
imageRepository: registry.aliyuncs.com/google_containers  # 修改默认地址为国内地址,国外的地址无法访问
kind: ClusterConfiguration
kubernetesVersion: v1.18.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12   # 默认网段即可,service资源的网段,集群内部的网络
  podSubnet: 10.244.0.0/16   # 注意:这个是新增的,Pod资源网段,需要与下面的pod网络插件地址一致
scheduler: {}

4.4 master节点拉取所需镜像(master节点执行)

# 根据指定 init-config.yaml 文件,查看初始化需要的镜像
$ kubeadm config images list --config=init-config.yaml

## 拉取镜像
$ kubeadm config images pull --config=init-config.yaml

## 查看拉取的镜像
$ docker images

4.5 master节点初始化和网络配置(master节点执行)

( kubeadm init 初始化配置参数如下,仅做了解即可)

  • –apiserver-advertise-address(string) API服务器所公布的其正在监听的IP地址
  • –apiserver-bind-port(int32) API服务器绑定的端口,默认6443
  • –apiserver-cert-extra-sans(stringSlice) 用于API Server服务证书的可选附加主题备用名称,可以是IP和DNS名称
  • –certificate-key(string) 用于加密kubeadm-certs Secret中的控制平面证书的密钥
  • –control-plane-endpoint(string) 为控制平面指定一个稳定的IP地址或者DNS名称
  • –image-repository(string) 选择用于拉取控制平面镜像的容器仓库,默认k8s.gcr.io
  • –kubernetes-version(string) 为控制平面选择一个特定的k8s版本,默认stable-1
  • –cri-socket(string) 指定要连接的CRI套接字的路径
  • –node-name(string) 指定节点的名称
  • –pod-network-cidr(string) 知名Pod网络可以使用的IP地址段,如果设置了这个参数,控制平面将会为每一个节点自动分配CIDRS
  • –service-cidr(string) 为服务的虚拟IP另外指定IP地址段,默认 10.96.0.0/12
  • –service-dns-domain(string) 为服务另外指定域名,默认 cluster.local
  • –token(string) 用于建立控制平面节点和工作节点之间的双向通信
  • –token-ttl(duration) 令牌被自动删除之前的持续时间,设置为0则永不过期
  • –upload-certs 将控制平面证书上传到kubeadm-certs Secret

(kubeadm通过初始化安装是不包括网络插件的,也就是说初始化之后不具备相关网络功能的,比如k8s-master节点上查看信息都是“Not Ready”状态、Pod的CoreDNS无法提供服务等 若初始化失败执行:kubeadm reset、rm -rf $HOME/.kube、/etc/kubernetes/、/var/lib/etcd/

4.5.1 使用 kubeadm 在 master 节点初始化k8s(master节点执行)

  • kubeadm 安装 k8s,这个方式安装的集群会把所有组件安装好,也就免去了需要手动安装 etcd 组件的操作
## 初始化 k8s
## 1)修改 kubernetes-version 为你自己的版本号;
## 2)修改 apiserver-advertise-address 为 master 节点的 IP
$ sudo kubeadm init --kubernetes-version=1.28.2 \
--apiserver-advertise-address=192.168.60.143 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock

4.5.2 初始化 k8s 成功的日志输出(master节点展示)

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/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.60.143:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:464fc74833ffce2ec83745db47d93e323ff47255c551197c949efc8ba6bcba36 

4.5.3 master节点复制k8s认证文件到用户的home目录(master节点执行)

$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ chown $(id -u):$(id -g) $HOME/.kube/config

4.5.4 启动 kubelet 并设置开机自启(master节点执行)

$ systemctl enable kubelet && systemctl start kubelet

4.6 node 节点加入集群(两台从节点执行)

  • 直接把k8s-master节点初始化之后的最后回显的token复制粘贴到node节点回车即可,无须做任何配置
  • 每个 master 最后回显的 token 和 sha 认证都不一样
$ kubeadm join 192.168.60.143:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:464fc74833ffce2ec83745db47d93e323ff47255c551197c949efc8ba6bcba36

# 如果加入集群的命令找不到了可以在master节点重新生成一个
$ kubeadm token create --print-join-command

4.7 在master节点查看各个节点的状态(master节点执行)

  • 前面已经提到了,在初始化 k8s-master 时并没有网络相关的配置,所以无法跟node节点通信,因此状态都是“Not Ready”。但是通过kubeadm join加入的node节点已经在k8s-master上可以看到。
  • 同理,目前 coredns 模块一直处于 Pending 也是正常状态。
## 查看节点信息
$ kubectl get nodes

NAME         STATUS     ROLES           AGE   VERSION
k8s-master   NotReady   master   		44m   v1.28.2
k8s-node1    NotReady   <none>          25m   v1.28.2
k8s-node2    NotReady   <none>          25m   v1.28.2

## 查看主节点运行 Pod 的状态
$ kubectl get pods --all-namespaces -o wide

NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES
kube-system   coredns-66f779496c-ccj8c             0/1     Pending   0          52m   <none>           <none>       <none>           <none>
kube-system   coredns-66f779496c-mvx6k             0/1     Pending   0          52m   <none>           <none>       <none>           <none>
kube-system   etcd-k8s-master                      1/1     Running   0          52m   192.168.60.143   k8s-master   <none>           <none>
kube-system   kube-apiserver-k8s-master            1/1     Running   0          52m   192.168.60.143   k8s-master   <none>           <none>
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          52m   192.168.60.143   k8s-master   <none>           <none>
kube-system   kube-proxy-8fbwr                     1/1     Running   0          33m   192.168.60.145   k8s-node2    <none>           <none>
kube-system   kube-proxy-h9xwc                     1/1     Running   0          33m   192.168.60.144   k8s-node1    <none>           <none>
kube-system   kube-proxy-rzdtk                     1/1     Running   0          52m   192.168.60.143   k8s-master   <none>           <none>
kube-system   kube-scheduler-k8s-master            1/1     Running   0          52m   192.168.60.143   k8s-master   <none>           <none>

5 部署 flannel 网络插件(具体在哪些服务器操作,下文副标题都有注明)

5.1 下载 flannel 插件(三台机器均需执行)

  • 按照其他博客的教程,这个插件是国外源,没梯子下不下来,我直接上传到 CSDN 资源
  • 部署 flannel 必要插件:https://download.csdn.net/download/qq_23845083/89527106
  • 资源包里包含 flannel-cni-plugin-v1.1.2.tar、flannel.tar、kube-flannel.yaml 三个资源,下文均用得到;
  • 将这三个资源分别放到服务器中的任意文件夹内,我是放在 /home/soft 文件夹中;

5.2 加载 flannel 镜像(三台机器均需执行)

## 导入镜像,切记要在镜像包所在目录执行此命令
$ ctr -n k8s.io i import flannel-cni-plugin-v1.1.2.tar
$ ctr -n k8s.io i import flannel.tar

# 查看镜像
$ crictl images | grep flannel
docker.io/flannel/flannel-cni-plugin                 v1.1.2              7a2dcab94698c       8.25MB
docker.io/flannel/flannel                            v0.21.5             a6c0cb5dbd211       69.9MB

5.3 部署网络插件(master节点执行)

$ kubectl apply -f kube-flannel.yaml

5.4 从节点支持 kubectl 命令(两台从节点执行)

5.4.1 此时从节点执行 kubectl 命令会报错:(两台从节点执行)

  • E0709 15:29:19.693750 97386 memcache.go:265] couldn’t get current server API group list: Get “http://localhost:8080/api?timeout=32s”: dial tcp [::1]:8080: connect: connection refused
  • The connection to the server localhost:8080 was refused - did you specify the right host or port?

5.4.2 分析结果以及解决方法:(两台从节点执行)

  • 原因是 kubectl 命令需要使用 kubernetes-admin 来运行
  • 将主节点中的 /etc/kubernetes/admin.conf 文件拷贝到从节点相同目录下,然后配置环境变量
## 配置环境变量
$ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
## 立即生效
$ source ~/.bash_profile

5.5 查看各节点和组件状态(三台机器均可执行)

## 查看节点状态
$ kubectl get nodes

NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   23m   v1.28.2
k8s-node01   Ready    <none>   14m   v1.28.2
k8s-node02   Ready    <none>   14m   v1.28.2

## 查看主节点运行 Pod 的状态
$ kubectl get pods --all-namespaces -o wide

NAMESPACE      NAME                                 READY   STATUS    RESTARTS   AGE     IP               NODE         NOMINATED NODE   READINESS GATES
kube-flannel   kube-flannel-ds-7rzg7                1/1     Running   0          5m13s   192.168.60.145   k8s-node2    <none>           <none>
kube-flannel   kube-flannel-ds-fxzg4                1/1     Running   0          5m13s   192.168.60.143   k8s-master   <none>           <none>
kube-flannel   kube-flannel-ds-gp45f                1/1     Running   0          5m13s   192.168.60.144   k8s-node1    <none>           <none>
kube-system    coredns-66f779496c-ccj8c             1/1     Running   0          106m    10.244.0.2       k8s-master   <none>           <none>
kube-system    coredns-66f779496c-mvx6k             1/1     Running   0          106m    10.244.2.2       k8s-node2    <none>           <none>
kube-system    etcd-k8s-master                      1/1     Running   0          106m    192.168.60.143   k8s-master   <none>           <none>
kube-system    kube-apiserver-k8s-master            1/1     Running   0          106m    192.168.60.143   k8s-master   <none>           <none>
kube-system    kube-controller-manager-k8s-master   1/1     Running   0          106m    192.168.60.143   k8s-master   <none>           <none>
kube-system    kube-proxy-8fbwr                     1/1     Running   0          87m     192.168.60.145   k8s-node2    <none>           <none>
kube-system    kube-proxy-h9xwc                     1/1     Running   0          87m     192.168.60.144   k8s-node1    <none>           <none>
kube-system    kube-proxy-rzdtk                     1/1     Running   0          106m    192.168.60.143   k8s-master   <none>           <none>
kube-system    kube-scheduler-k8s-master            1/1     Running   0          106m    192.168.60.143   k8s-master   <none>           <none>

## 查看指定pod状态
$ kubectl get pods -n kube-system

NAME                                 READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-25bzd             1/1     Running   0          23m
coredns-7ff77c879f-wp885             1/1     Running   0          23m
etcd-k8s-master                      1/1     Running   0          24m
kube-apiserver-k8s-master            1/1     Running   0          24m
kube-controller-manager-k8s-master   1/1     Running   0          24m
kube-proxy-2tphl                     1/1     Running   0          15m
kube-proxy-hqppj                     1/1     Running   0          15m
kube-proxy-rfxw2                     1/1     Running   0          23m
kube-scheduler-k8s-master            1/1     Running   0          24m

## 查看所有pod状态
$ kubectl get pods -A

NAMESPACE      NAME                                 READY   STATUS    RESTARTS   AGE
kube-flannel   kube-flannel-ds-h727x                1/1     Running   0          77s
kube-flannel   kube-flannel-ds-kbztr                1/1     Running   0          77s
kube-flannel   kube-flannel-ds-nw9pr                1/1     Running   0          77s
kube-system    coredns-7ff77c879f-25bzd             1/1     Running   0          24m
kube-system    coredns-7ff77c879f-wp885             1/1     Running   0          24m
kube-system    etcd-k8s-master                      1/1     Running   0          24m
kube-system    kube-apiserver-k8s-master            1/1     Running   0          24m
kube-system    kube-controller-manager-k8s-master   1/1     Running   0          24m
kube-system    kube-proxy-2tphl                     1/1     Running   0          15m
kube-system    kube-proxy-hqppj                     1/1     Running   0          15m
kube-system    kube-proxy-rfxw2                     1/1     Running   0          24m
kube-system    kube-scheduler-k8s-master            1/1     Running   0          24m

## 查看集群组件状态
$ kubectl get cs

NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok                              
scheduler            Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""} 

6 部署 kubernetes-dashboard(master节点部署web页面)

6.1 配置 kubernetes-dashboard 并启动

## Step 1 :获取资源配置文件
$ wget  https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml

## Step 2:编辑资源配置文件,大概定位到39行,修改其提供的service资源
$ vi recommended.yaml

spec:
  type: NodePort # 新增的内容
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 31000	# 自行定义 web 访问端口号
  selector:
    k8s-app: kubernetes-dashboard

## Step 3:部署pod应用
$ kubectl apply -f recommended.yaml 

## Step 4:创建admin-user账户及授权的资源配置文件
$ cat>dashboard-adminuser.yml<<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
    name: admin-user
    namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
    name: admin-user
roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
EOF

## Step 5:创建资源实例
$ kubectl create -f dashboard-adminuser.yml

## Step 6:获取账户admin-user的Token用于登录
## 较早版本会自动生成 token,v1.28.2版本需要手动生成,执行命令即可:
$ kubectl create token admin-user  --namespace kube-system

eyJhbGciOiJSUzI1NiIsImtpZCI6InFBcUVIQ3kxUV9YOTlteGhULUxTTHRkT1FaRU02Y3d2Vk1OcWRkaE45eE0ifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzIwNTE3NTMyLCJpYXQiOjE3MjA1MTM5MzIsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiYTBkZDY1MTgtOWZiNi00MjhjLTllNTktOTNiNWNmMDhiZTJiIn19LCJuYmYiOjE3MjA1MTM5MzIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbi11c2VyIn0.SoY_tcafcrEYfmVXvrwFpnB4I2DV1K8KcshRkJykmOQDIqUHsk96rovj3U5njHRGuOx0b37SlSqjVW53hBHsni2l53J4DFV9IxGzPtD_mtWcd0AZDTcWtAXa9x4CyHB-2SH5vRxaRODnVig9F88v9WvYOE-2DVr4Zv9Pw6itcPnqF_4uFEt0PYQew7AnGtqixENonG3m3baMg5r5On0qczXe2iVKHYVFpEgdIud5Y4zQJWJ5hOCHrbKhFZxaRv5E601XOrXSUsQO834_rc4LjQY4DFs2M39h5v9SMEpAMXQ67g552hWfBzFEnN4hTVQxYHBCuR6CHZkkxhgUOXCFqg

6.2 登录验证

  • 访问 master 节点的 IP 地址:https://192.168.60.143:31000,使用token登录即可
    在这里插入图片描述
    在这里插入图片描述

参考文章:https://blog.csdn.net/weixin_73059729/article/details/139695528

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1918682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BGP第三日谈

今日所用拓扑 先补充昨日没有讲到的知识点&#xff1a; 1.IBGP有更新源检测机制 这种机制使得BGP路由在IBGP邻居间传递时下一跳地址仍然保持不变&#xff0c;但是IBGP却没有去往下一跳地址的路由&#xff0c;所以我们需要手动将IBGP邻居间传递的BGP路由下一跳地址转成与IBGP…

星辰考古:TiDB v4.0 进化前夜

前情回顾TiDB v4 时间线TiDB v4 新特性 TiDBTiKVPDTiFlashTiCDCTiDB v4 兼容性变化 TiDBTiKVPD其他TiDB 社区互助升级活动TiDB 3.0.20 升级到 4.0.16 注意事项升级速览直观变化总结素材来源&#x1f33b; 往期精彩 ▼ 前情回顾 在前面的章节中&#xff0c;我们共同梳理了 TiDB …

【ARM】CCI缓存一致性整理

目录 1.CCI500提供的功能 2.CCI500在SOC系统中所处的位置​编辑 3.CCI500内部结构​编辑 4.功能描述 1.CCI500提供的功能 2.CCI500在SOC系统中所处的位置 3.CCI500内部结构 Transaction Tracker&#xff08;TT&#xff09;是用来解决一致性和ordering问题的&#xff0c;它…

光伏仿真系统推荐

在全球能源转型和绿色能源发展的背景下&#xff0c;光伏行业作为重要的绿色能源组成部分&#xff0c;其智能化、数字化的发展显得尤为关键。光伏仿真系统作为提升光伏项目设计、运维效率的重要工具&#xff0c;在行业中扮演着不可或缺的角色。在众多光伏仿真系统中&#xff0c;…

构建工具webpackvite

1. webpack 使用步骤: 1.初始化项目yarn init -y&#xff08;也可以是npm其他包管理工具&#xff09; 2.安装依赖webpack webpack-cli&#xff1a;yarn add -D webpack webpack-cli&#xff08;-D是只用于开发时候加&#xff09; 3.在项目中创建src目录&#xff0c;然后编写代…

mov视频怎么改成mp4?把mov改成MP4的四个方法

mov视频怎么改成mp4&#xff1f;选择合适的视频格式对于确保内容质量和流通性至关重要。尽管苹果公司的mov格式因其出色的视频表现备受赞誉&#xff0c;但在某些情况下&#xff0c;它并非最佳选择&#xff0c;因为使用mov格式可能面临一些挑战。MP4格式在各种设备&#xff08;如…

Suricata引擎二次开发之命中规则定位

二开背景 suricata是一款高性能的开源网络入侵检测防御引擎&#xff0c;旨在检测、预防和应对网络中的恶意活动和攻击。suricata引擎使用多线程技术&#xff0c;能够快速、准确地分析网络流量并识别潜在的安全威胁&#xff0c;是众多IDS和IPS厂商的底层规则检测模块。 前段时间…

Python精神病算法和自我认知异类数学模型

&#x1f3af;要点 &#x1f3af;空间不确定性和动态相互作用自我认知异类模型 | &#x1f3af;精神病神经元算法推理 | &#x1f3af;集体信念催化个人行动力数学模型 | &#x1f3af;物种基因进化关系网络算法 | &#x1f3af;电路噪声低功耗容错解码算法 &#x1f4dc;和-…

下载设计免抠元素,就上这6个网站,免费下载!

寻找免费PNG免抠素材网站是创意设计者们探索的重要一环。这些网站提供了丰富的PNG格式素材&#xff0c;去除了背景&#xff0c;方便在不同项目中使用。精心挑选了6个免费PNG免抠素材网站&#xff0c;它们提供了高品质的素材资源&#xff0c;无论是个人设计还是商业项目&#xf…

Jetson-AGX-Orin 非docker环境源码编译安装CyberRT

Jetson-AGX-Orin 非docker环境源码编译安装CyberRT 1、安装依赖 sudo apt update sudo apt-get install g gdb gcc cmake sudo apt install libpoco-dev uuid-dev libncurses5-dev python3-dev python3-pip python3 -m pip install protobuf3.14.02、下载CyberRT源码 git cl…

从0开始的STM32HAL库学习4

对射式红外传感器计数复现 配置工程 我们直接复制oled的工程&#xff0c;但是要重命名。 将PB14设置为中断引脚 自定义命名为sensorcount 设置为上升沿触发 打开中断 配置NVCI 都为默认就可以了 修改代码 修改stm32f1xx_it.c 文件 找到中断函数并修改 void EXTI15_10_I…

mp3文件导入音乐乱码

在网上下载了beyond的mp3文件&#xff0c;发现看起来没问题&#xff0c;一旦加入到音乐软件就会乱码&#xff0c;看起来说因为音乐文件加载到元数据 思路参考了这个文章 解决Mac电脑音乐显示歌名的乱码问题_音频文件乱码-CSDN博客 不过这个只能解决名称乱码&#xff0c;我发…

Kodcloud可道云安装与一键发布上线实现远程访问详细教程

文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 本文主要为大家介绍一款国人自研的在线Web文件管理器可道云&#xff0c;…

前端新手小白的React入坑指南

有个小伙伴跟我说&#xff0c;已经毕业了&#xff0c;开始实习了。但公司现在用的还是Vue&#xff0c;领导说是过段时间让他用React做项目&#xff0c;先自己学习起来。 我给他找了一些文档&#xff0c;顺便着呢&#xff0c;反正自己也写博客&#xff0c;自己也写一份吧&#x…

共集电极放大器+共基极放大器+放大器参数总结+单片机(全局/静态/动态变量+LED点阵初识+点亮LED并显示图形)

2024-7-11&#xff0c;星期四&#xff0c;18:38&#xff0c;天气&#xff1a;雨&#xff0c;心情&#xff1a;晴。终于下雨了&#xff0c;感受到了久违的凉爽&#xff0c;没有什么特殊的事情发生&#xff0c;继续学习啦&#xff0c;加油加油&#xff01;&#xff01;&#xff0…

君子签电子合同推动企业人事管理变革,降本提效

在日益复杂的人力资源管理领域&#xff0c;合同签署与管理成为HR面临的一大挑战。面对庞大的合同量、繁琐的审批流程、频繁的岗位变动以及离职时的合同管理难题&#xff0c;传统方式已难以满足高效、安全、合规的需求。 君子签针对HR面临的挑战和需求&#xff0c;打造智能合同…

如何定量选择孔销基准?-DTAS来帮你!

在当今快速发展的工程领域&#xff0c;公差仿真的作用日渐重要&#xff0c;在公差仿真中&#xff0c;基准体系的选择对于最终结果更是至关重要。基准体系不同可能导致仿真过程中的参数计算、误差分析以及最终的工程设计都有所不同。基准体系作为评估和比较的参照&#xff0c;直…

专业模板,轻松打造个性化产品册

​在当今竞争激烈的市场环境中&#xff0c;如何让你的产品在众多竞品中脱颖而出&#xff0c;吸引消费者的目光&#xff1f;专业模板为您提供了解决方案。通过轻松打造个性化产品册&#xff0c;让您的产品焕发出独特的魅力&#xff0c;赢得消费者的青睐。本文将结合实际案例和数…

C++中的虚函数:深入探究多态性

目录 ​编辑 引言 虚函数基础 纯虚函数与抽象类 虚函数与多态 虚析构函数 结论 引言 在C中&#xff0c;虚函数是实现多态性的关键机制&#xff0c;它允许我们编写更为灵活和可扩展的代码。通过虚函数&#xff0c;派生类可以提供不同的实现&#xff0c;而基类指针或引用…

面对频繁紧急修复,测试人员5大应对技巧!

频繁的紧急修复问题&#xff0c;经常会过多占用测试时间&#xff0c;影响正常测试周期和回归测试的完整性&#xff0c;不利于测试效率和质量的提高。因此为了更高效地处理此问题&#xff0c;测试人员可以采取以下5大策略来应对&#xff0c;以减少此类问题的发生并提高工作效率。…