首页 > 其他分享 >Kubernetes最新版本部署完整过程(1.31)

Kubernetes最新版本部署完整过程(1.31)

时间:2024-09-22 20:51:07浏览次数:11  
标签:Kubernetes kubernetes containerd master dashboard 版本 1.31 kube root

参考官方文档进行部署:Kubernetes

一、环境准备

本次实验使用的操作系统为:Centos stream 9

1.1 节点规划

  • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。

  • 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。

  • CPU 2 核心及以上。

  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。

  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。

主机名IP角色CPU/内存
master10.45.25.100控制节点4核/4G
node110.45.25.101服务运行节点8核/8G
node210.45.25.102服务运行节点8核/8G
# 每个节点修改对应的主机名并配置hosts解析。
[root@localhost ~]# hostnamectl hostname master/node{1,2}
[root@master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.45.25.100 master
10.45.25.101 node1
10.45.25.102 node2
​
# 确保每个节点上 MAC 地址和 product_uuid 的唯一性(在克隆完虚拟机之后,进入网卡设置中,重新生成MAC地址)
ip link 或 ifconfig -a  #获取网络接口的 MAC 地址
sudo cat /sys/class/dmi/id/product_uuid #校验 product_uuid

1.2 协议和端口

当你在一个有严格网络边界的环境里运行 Kubernetes,例如拥有物理网络防火墙或者拥有公有云中虚拟网络的自有数据中心, 了解 Kubernetes 组件使用了哪些端口和协议是非常有用的。

控制面

协议方向端口范围目的使用者
TCP入站6443Kubernetes API 服务器所有
TCP入站2379-2380etcd 服务器客户端 APIkube-apiserver、etcd
TCP入站10250kubelet API自身、控制面
TCP入站10259kube-scheduler自身
TCP入站10257kube-controller-manager自身

尽管 etcd 的端口也列举在控制面的部分,但你也可以在外部自己托管 etcd 集群或者自定义端口。

工作节点

协议方向端口范围目的使用者
TCP入站10250kubelet API自身、控制面
TCP入站10256kube-proxy自身、负载均衡器
TCP入站30000-32767NodePort Services†所有

所有默认端口都可以重新配置。当使用自定义的端口时,你需要打开这些端口来代替这里提到的默认端口。

一个常见的例子是 API 服务器的端口有时会配置为 443。或者你也可以使用默认端口, 把 API 服务器放到一个监听 443 端口的负载均衡器后面,并且路由所有请求到 API 服务器的默认端口

关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

关闭selinux

setenforce 0  #临时关闭
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config  #永久关闭

1.3 关闭交换分区

  • 交换分区的配置。kubelet 的默认行为是在节点上检测到交换内存时无法启动。

  • # 临时关闭
    sudo swapoff -a
    ​
    # 永久关闭
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    • 如果 kubelet 未被正确配置使用交换分区,则你必须禁用交换分区。 例如,sudo swapoff -a 将暂时禁用交换分区。要使此更改在重启后保持不变,请确保在如 /etc/fstabsystemd.swap 等配置文件中禁用交换分区,具体取决于你的系统如何配置。

1.4 安装容器运行时

默认情况下,Kubernetes 使用 容器运行时接口(Container Runtime Interface,CRI) 来与你所选择的容器运行时交互。

说明:v1.24 之前的 Kubernetes 版本直接集成了 Docker Engine 的一个组件,名为 dockershim。 这种特殊的直接整合不再是 Kubernetes 的一部分 (这次删除被作为 v1.20 发行版本的一部分宣布)。

安装和配置先决条件

默认情况下,Linux 内核不允许 IPv4 数据包在接口之间路由。 大多数 Kubernetes 集群网络实现都会更改此设置(如果需要),但有些人可能希望管理员为他们执行此操作。 (有些人可能还期望设置其他 sysctl 参数、加载内核模块等;请参阅你的特定网络实施的文档。)

配置加载内核及IPv4 数据包转发

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
​
modprobe overlay
modprobe br_netfilter
​
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
​
# 应用 sysctl 参数而不重新启动
sysctl --system
​
# 使用以下命令验证 net.ipv4.ip_forward 是否设置为 1
sysctl net.ipv4.ip_forward

安装containerd

## 1、containerd
# 下载包
wget https://github.com/containerd/containerd/releases/download/v1.7.22/containerd-1.7.22-linux-amd64.tar.gz
​
# 将下载的包解压到/usr/local下
tar Cxzvf /usr/local containerd-1.7.22-linux-amd64.tar.gz
​
# 下载服务启动文件
wget -O /etc/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
# 文件内容如下,下载不下来直接复制
cat /etc/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
# 启动containerd
systemctl daemon-reload
systemctl enable --now containerd
​
## 2、Installing runc
wget https://github.com/opencontainers/runc/releases/download/v1.2.0-rc.3/runc.amd64
install -m 755 runc.amd64 /usr/local/sbin/runc

将containerd切换为国内源

# 创建containerd目录
mkdir /etc/containerd
​
# 恢复默认配置文件
containerd config default > /etc/containerd/config.toml
​
# 切换为国内源
sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/containerd/config.toml
​
# 修改SystemCgroup为true
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true
​
# 重启服务
systemctl daemon-reload
systemctl restart containerd

配置containerd镜像加速

参考文档:解决镜像加速问题-CSDN博客

[root@master ~]# vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = "/etc/containerd/certs.d"  #修改此处
[root@master ~]# mkdir -p /etc/containerd/certs.d/docker.io
# docker hub加速
[root@master ~]# vim /etc/containerd/certs.d/docker.io/hosts.toml
[root@master ~]# cat /etc/containerd/certs.d/docker.io/hosts.toml 
server ="https://docker.io"
[host."https://docker.m.daocloud.io"]
  capabilities =["pull","resolve"]
[host."https://reg-mirror.giniu.com"]
  capabilities =["pull","resolve"]
# registry.k8s.io镜像加速
[root@master ~]# mkdir -p /etc/containerd/certs.d/registry.k8s.io
[root@master ~]# vim /etc/containerd/certs.d/registry.k8s.io/hosts.toml
[root@master ~]# cat /etc/containerd/certs.d/registry.k8s.io/hosts.toml
server ="https://registry.k8s.io"
[host."https://k8s.m.daocloud.io"]
  capabilities =["pull","resolve","push"]
# 重启服务(更多加速文档参考上述文档)
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart containerd.service

二、安装kubeadm、kubelet 和 kubectl

你需要在每台机器上安装以下的软件包:

  • kubeadm:用来初始化集群的指令。

  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。

  • kubectl:用来与集群通信的命令行工具

添加 Kubernetes 的 yum 仓库。

# 此操作会覆盖 /etc/yum.repos.d/kubernetes.repo 中现存的所有配置
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

安装 kubelet、kubeadm 和 kubectl,并启用 kubelet 以确保它在启动时自动启动:

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet

kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。

三、使用kubeadm 创建集群

3.1 拉取所需镜像

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

3.2 初始化控制平面节点

https://pkg.go.dev/k8s.io/[email protected]/cmd/kubeadm/app/apis/kubeadm/v1beta4#hdr-Kubeadm_init_configuration_types

# 创建初始化配置文件
kubeadm config print init-defaults > /etc/kubernetes/init-default.yaml

# 修改为国内阿里源
sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/kubernetes/init-default.yaml

# 设置 apiServerIP 地址. 请自行替换10.45.25.100为自己宿主机IP
sed -i 's/1.2.3.4/10.45.25.100/' /etc/kubernetes/init-default.yaml

# 文件内容
[root@master ~]# cat /etc/kubernetes/init-default.yaml
apiVersion: kubeadm.k8s.io/v1beta4
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 10.45.25.100
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  imagePullSerial: true
  name: node
  taints: null
timeouts:
  controlPlaneComponentHealthCheck: 4m0s
  discovery: 5m0s
  etcdAPICall: 2m0s
  kubeletHealthCheck: 4m0s
  kubernetesAPICall: 1m0s
  tlsBootstrap: 5m0s
  upgradeManifests: 5m0s
---
apiServer: {}
apiVersion: kubeadm.k8s.io/v1beta4
caCertificateValidityPeriod: 87600h0m0s
certificateValidityPeriod: 8760h0m0s
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
encryptionAlgorithm: RSA-2048
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.31.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 192.168.0.0/16   #加入此句
proxy: {}
scheduler: {}

# 初始化主节点
kubeadm init --image-repository registry.aliyuncs.com/google_containers

部署完成后的提示信息

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 10.45.25.100:6443 --token jiokmj.y0rsa5h405xoqiqa \
	--discovery-token-ca-cert-hash sha256:fecc31fd4893745db901671e1cf491263f90d72e61b8aec4cbad5b6005e47170

在开始使用群集,您需要以普通用户身份运行以下操作:

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

如果您是root用户,也可以运行:

export KUBECONFIG=/etc/kubernetes/admin.conf

接下来,您需要向集群部署一个 Pod 网络。

# 查看集群状态,此时 coredns 服务为Pending状态,我们需要安装网络插件
[root@master ~]# kubectl get pods --all-namespaces
NAMESPACE     NAME                             READY   STATUS    RESTARTS   AGE
kube-system   coredns-6ddff5bd6d-4pq6v         0/1     Pending   0          2m2s
kube-system   coredns-6ddff5bd6d-tgc2c         0/1     Pending   0          2m2s
kube-system   etcd-master                      1/1     Running   13         2m9s
kube-system   kube-apiserver-master            1/1     Running   0          2m9s
kube-system   kube-controller-manager-master   1/1     Running   0          2m10s
kube-system   kube-proxy-chpq6                 1/1     Running   0          2m3s
kube-system   kube-scheduler-master            1/1     Running   18         2m9s

3.3 安装网络插件

常见的 Kubernetes 网络插件有:Calico、Flannel、Cilium、Weave Net等,下面列举calico和flannel的部署(安装其中一个即可)。

Calico

Calico 是一个联网和网络策略供应商。 Calico 支持一套灵活的网络选项,因此你可以根据自己的情况选择最有效的选项,包括非覆盖和覆盖网络,带或不带 BGP。 Calico 使用相同的引擎为主机、Pod 和(如果使用 Istio 和 Envoy)应用程序在服务网格层执行网络策略。

方法一:暂时不可行
mkdir calico && cd calico

# 1、Install the Tigera Calico operator and custom resource definitions.
wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/tigera-operator.yaml
kubectl create -f tigera-operator.yaml

# 2、Install Calico by creating the necessary custom resource. For more information on configuration options available in this manifest, see the installation reference.
wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/custom-resources.yaml
kubectl create -f custom-resources.yaml

# 3、Confirm that all of the pods are running with the following command.
watch kubectl get pods -n calico-system


方法二:
# 注:由于访问不了外网所以需要使用梯子把包下载下来,再将所需的镜像传到虚拟机中,并导入到每台主机
# 导入镜像命令如下
ctr -n k8s.io images import calico-node.tar
ctr -n k8s.io images import calico-cni.tar
ctr -n k8s.io images import calico-kube-controllers.tar

# 下载Kubernetes API数据存储的Calico网络清单,50个节点或更少。
wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/calico.yaml

# 如果您使用的是pod CIDR 192.168.0.0/16,直接部署calico即可。如果您在kubeadm中使用不同的pod CIDR,则不需要进行任何更改——Calico将根据运行配置自动检测CIDR。对于其他平台,请确保在清单中取消注释CALICO_IPV4POOL_CIDR变量,并将其设置为与所选pod CIDR相同的值。

# 部署calico
kubectl apply -f calico.yaml
Flannel

Flannel是一个简单、高效的容器网络解决方案,适用于需要在多个主机上运行容器的场景。它通过虚拟网络技术和 |P 地址管理来实现容器之间的通信和跨丰机连接,为容器平台提供了可靠的网络基础设施。

# 在使用方法一之前需要在kube-controller-manager中加入cidr
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
spec:
  containers:
  - command:
    - kube-controller-manager
    ..............
    - --allocate-node-cidrs=true    #加入
    - --cluster-cidr=192.168.0.0/16 #这两句
# 重启kubelet
systemctl status kubelet.service

方法一:
# 使用kubectl安装
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

# 修改network,因为初始化集群时指定的podCIDR为192.168.0.0/16
# 如果指定的是10.244.0.0/16则无需修改
vim kube-flannel.yml
  net-conf.json: |
    {
      "Network": "192.168.0.0/16",
# 应用部署
kubectl apply -f kube-flannel.yml

方法二:由于网络原因,暂时行不通
# 使用heml安装,首先需要安装helm,安装helm的方法在7.1
# Needs manual creation of namespace to avoid helm error
kubectl create ns kube-flannel
kubectl label --overwrite ns kube-flannel pod-security.kubernetes.io/enforce=privileged

helm repo add flannel https://flannel-io.github.io/flannel/
helm install flannel --set podCidr="192.168.0.0/16" --namespace kube-flannel flannel/flannel
小结
# 在网络插件部署完成后,就可以看到coredns正常运行了
[root@master ~]# kubectl get pod -A
NAMESPACE      NAME                             READY   STATUS    RESTARTS   AGE
kube-flannel   kube-flannel-ds-vzxfc            1/1     Running   0          4m3s
kube-system    coredns-855c4dd65d-7zrfx         1/1     Running   0          51m
kube-system    coredns-855c4dd65d-nr54p         1/1     Running   0          51m
kube-system    etcd-master                      1/1     Running   0          51m
kube-system    kube-apiserver-master            1/1     Running   0          51m
kube-system    kube-controller-manager-master   1/1     Running   0          4m35s
kube-system    kube-proxy-hhr82                 1/1     Running   0          51m
kube-system    kube-scheduler-master            1/1     Running   0          51m
[root@master ~]# 

四、加入node节点

kubeadm join 10.45.25.100:6443 --token jiokmj.y0rsa5h405xoqiqa \
	--discovery-token-ca-cert-hash sha256:fecc31fd4893745db901671e1cf491263f90d72e61b8aec4cbad5b6005e47170 

# 生成新令牌
kubeadm token create --print-join-command

五、验证集群

[root@master ~]#  kubectl get nodes -A
NAME     STATUS   ROLES           AGE    VERSION
master   Ready    control-plane   109m   v1.31.0
node1    Ready    <none>          2m3s   v1.31.0
node2    Ready    <none>          116s   v1.31.0
[root@master ~]# 

# 创建pod并向外暴露端口,检测网络可用性
[root@master ~]# vim nginx.yaml
[root@master ~]# cat nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app.kubernetes.io/name: MyApp
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
      - containerPort: 80
        name: http-web-svc
---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
    - port: 80
      targetPort: 80
      # 可选字段
      # 默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号
      #(默认:30000-32767)
      nodePort: 30007
[root@master ~]# kubectl apply -f nginx.yaml 
[root@master ~]# kubectl get pod,svc
NAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   0          72s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        128m
service/my-service   NodePort    10.111.129.97   <none>        80:30007/TCP   72s
[root@master ~]# 
浏览器访问:集群IP:30007

六、启用 kubectl 自动补全

# Install bash-completion
yum install -y bash-completion

# Source the completion script in your ~/.bashrc file
echo 'source <(kubectl completion bash)' >>~/.bashrc

# Add the completion script to the /etc/bash_completion.d directory
kubectl completion bash >/etc/bash_completion.d/kubectl

#重新加载shell生效

七、部署kubernetes仪表板

Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment、Job、DaemonSet 等等)。 例如,你可以对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。

使用heml部署

# 下载 helm
wget https://get.helm.sh/helm-v3.16.1-linux-amd64.tar.gz

tar zxf helm-v3.16.1-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/helm && rm -rf linux-amd64

当您已经安装好了Helm之后,您可以添加一个chart 仓库。从 Artifact Hub中查找有效的Helm chart仓库。

helm repo add bitnami https://charts.bitnami.com/bitnami

当添加完成,您将可以看到可以被您安装的charts列表:

[root@master ~]# helm search repo bitnami
NAME                                        	CHART VERSION	APP VERSION  	DESCRIPTION                                       
bitnami/airflow                             	19.0.8       	2.10.1       	Apache Airflow is a tool to express and execute...
bitnami/apache                              	11.2.18      	2.4.62       	Apache HTTP Server is an open-source HTTP serve...
bitnami/apisix                              	3.4.0        	3.10.0       	Apache APISIX is high-performance, real-time AP...
bitnami/appsmith                            	4.0.7        	1.40.0       	Appsmith is an open source platform for buildin...
bitnami/argo-cd                             	7.0.11       	2.12.3       	Argo CD is a continuous delivery tool for Kuber...
bitnami/argo-workflows                      	9.1.14       	3.5.10       	Argo Workflows is meant to orchestrate Kubernet...
···············································

部署 Dashboard UI

# 添加 kubernetes-dashboard 仓库
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/

# 使用 kubernetes-dashboard Chart 部署名为 `kubernetes-dashboard` 的 Helm Release
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard

设置访问端口

kubectl edit svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard

修改service的type类型为NodePort,使其可以外部访问

[root@master ~]# kubectl -n kubernetes-dashboard get svc  
NAME                                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
kubernetes-dashboard-api               ClusterIP   10.101.101.171   <none>        8000/TCP                        4m4s
kubernetes-dashboard-auth              ClusterIP   10.99.7.104      <none>        8000/TCP                        4m4s
kubernetes-dashboard-kong-manager      NodePort    10.104.27.216    <none>        8002:31985/TCP,8445:30947/TCP   4m4s
kubernetes-dashboard-kong-proxy        NodePort    10.102.153.149   <none>        443:31552/TCP                   4m4s
kubernetes-dashboard-metrics-scraper   ClusterIP   10.104.74.246    <none>        8000/TCP                        4m4s
kubernetes-dashboard-web               ClusterIP   10.104.227.225   <none>        8000/TCP                        4m4s
[root@master ~]# 

访问: https://集群任意IP:端口 https://10.45.25.100:31552

创建访问账号

vim /etc/kubernetes/dashadm.yaml
#创建服务帐户
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
#创建群集角色绑定
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: kubernetes-dashboard
  
kubectl apply -f /etc/kubernetes/dashadm.yaml

获取访问令牌

kubectl -n kubernetes-dashboard create token admin-user

使用kubectl部署

# 此为老版本
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml

# 修改镜像地址
[root@master ~]# grep 'image:' recommended.yaml
          image: registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.7.0
          image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.8
[root@master ~]#

# 部署dashboard
[root@master ~]# kubectl apply -f recommended.yaml 
[root@master ~]# kubectl get pods -n kubernetes-dashboard   
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-86f7cf4cd8-jxrwk   1/1     Running   0          4m51s
kubernetes-dashboard-6d64b4c7b4-cjhdg        1/1     Running   0          4m51s
[root@master ~]# 

# 设置访问端口
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
# type: ClusterIP 改为 type: NodePort

# 查看对外暴露的端口,443:30659
[root@master ~]# kubectl get svc -n kubernetes-dashboard                      
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.100.114.8    <none>        8000/TCP        6m44s
kubernetes-dashboard        NodePort    10.103.128.73   <none>        443:30659/TCP   6m44s
[root@master ~]# 

# 创建访问账号
[root@master ~]# vi dash.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
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: kubernetes-dashboard  
[root@master ~]# kubectl apply -f dash.yaml


#获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

# 创建新的令牌
[root@master ~]# kubectl -n kubernetes-dashboard create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6IkJYNnc2U1lWRDRfZ29iajFleHg3SDFoQ3luNUo2WHd5ZGpBSjV6YV93aG8ifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzI2MzkwMTU3LCJpYXQiOjE3MjYzODY1NTcsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiNDBhY2I1NTAtMTMyOC00M2RiLWEzZWEtMGY1YzE5MGI4OGNkIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiYWQxZGMwMDUtYjcxNy00YjNhLTliMDktNDkwMGQ2NTQxOWVhIn19LCJuYmYiOjE3MjYzODY1NTcsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.kjyp0R9LhJbP6zihUc7U7Msl8Wt1Lq8ERR2kQhnsFGDXltS8sK2K1SBuPl13r5c2tM8AYZfw0CyD9F1lTAw3R2ZTJx213deKwTHVeLE_OIvlw3oemvPZDnnKBYSipvg6IxZjCeuKRitvPidoD8HDzGxODcA1b-Ujcc4zlKV3WWKMOfS_Z9lQoCeA1j5pUBJUJbE-PhlQ7Ro25fnHa0fIImT7n7CBcoU9AWTf6FTE-mP9tvuYDNd3sF-tXBjGh3JsXxLwJ749n2ePjIKTk21h2u7LvWIZixnJqB2LsaAgTWyZmPyfZ__pEea8MyBMSr5Rztyhb_VuHJZLmfsOaeQcAA
[root@master ~]# 

使用令牌登录

登录成功界面

附录

标签:Kubernetes,kubernetes,containerd,master,dashboard,版本,1.31,kube,root
From: https://blog.csdn.net/weixin_52377412/article/details/142371588

相关文章

  • 探索 Kubernetes 服务网格:Istio 实战指南
    ......
  • 长安启源A07全新真香版即将预售:性能升级增程、纯电双动力版本
    9月22日讯,长安汽车旗下启源品牌再度发力,宣布其热门车型A07全新真香版将于9月26日启动先享预订程序。据悉,这款新车可视作原有A07车型的升级款,重点在配置和技术细节上进行了多项改进,力求带给消费者更为优质、智能的驾乘体验。动力系统全面革新,兼顾性能与节能长安启源A07全新真......
  • kubernetes集群公共服务 DNS
    1.我们先按照之前的方式新增加一个虚拟机。一、软件安装#yum-yinstallbind二、软件配置2.1主配置文件修改#vim/etc/named.conf#cat-n/etc/named.conf1//2//named.conf3//4//ProvidedbyRedHatbindpackagetoconfiguretheISCB......
  • Git 工作区、暂存区和版本库
    Workspace:工作区。编写代码的区域。Repository:仓库区(或本地仓库)。用来保存commit,一个commit,就是工作区的一个历史版本。Index/Stage:暂存区。用来暂存生成commit所需的信息,可看作临时的commit,gitadd将工作区的指定内容加入暂存区,gitcommit依照暂存区信息生成commit,并......
  • MacOS升级Ruby版本的完整指南
    前言随着技术的快速发展,保持开发环境的最新状态变得至关重要。对于Ruby开发者,升级Ruby版本不仅能获得性能提升,还能享受更多的功能特性和更高的安全性。特别是在移动端开发中,Ruby和RubyonRails的应用非常广泛,因此确保你的Ruby版本与最新标准一致尤为重要。本文将详细介绍如......
  • Java后端中的数据版本控制:如何管理数据结构的演变
    Java后端中的数据版本控制:如何管理数据结构的演变大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代应用开发中,数据结构的演变是一个常见的问题,尤其是在业务需求不断变化的情况下。本文将探讨如何在Java后端中有效地实现数据版本控制,以便在应用演......
  • Kubernetes-1. 介绍和安装
    1.Kubernetes介绍下载网址:https://github.com/kubernetes/kubernetes/releases1.1Kubernetes的概述容器编排技术:容器编排系统可以对多个docker主机进行统一的管理和调度,协调容器化应用程序的部署、伸缩、发现和管理。主要的容器编排系统如下DockerSwarm:Docker官方提供......
  • Kubernetes集群部署(kubernetes)
    三台主机恢复到docker快照状态;检查驱动器类型为sytemd;设置各个节点的主机名;然后同步会话,修改hosts文件;在k8s运行过程中不建议使用交换分区;关闭交换分区;但是这种方法是临时性的;如何设置永久不启用交换分区;交换分区也是以挂载的方式加入到系统中的;注释掉......
  • 短说社区V5.0测试版来啦! 快来关注最新版本~
    Hi大家好,我是给你们带来惊喜的运营小番茄。本期是一期大家期待已久的重磅更新! 5.0.0测试版来啦!随小番茄一期了解一下本次更新主要有哪些内容吧~ 一、移动端新版UI本次更新除UI全新升级之外,在升级UI的同时我们还做了一些使用体验的优化和升级,欢迎朋友们前来体验,给短说提出宝贵的意......
  • 【秋招笔试-支持在线评测-试读版本】0919华为秋招(已改编)-三语言题解
    ......