【云原生|Kubernetes】02-Kubeadm安装部署Kubernetes集群

news2024/11/24 14:37:21

【云原生|Kubernetes】02-Kubeadm安装部署Kubernetes集群

文章目录

  • 【云原生|Kubernetes】02-Kubeadm安装部署Kubernetes集群
    • 前言
    • 环境介绍
    • 安装kubernetes集群
      • 基础环境设置
      • 安装Kubernetes集群
        • 安装kubeadm,kubectl,kubelet
        • kubeadm初始化集群(master节点操作)
        • 安装网络插件flannel(master操作)
        • Node节点加入集群
        • 查看集群状态信息
      • 重置集群
      • 安装dashboard

前言

前面简单介绍了Kubernetes的相关架构及其组件,这一章节我们将介绍如何快速搭建Kubernetes的集群,这里我们将使用官方支持的用于部署 Kubernetes 的工具— kubeadm。

环境介绍

主机名ip地址节点类型系统版本
master.example.com192.168.194.128master,etcdcentos7.x
node1.example.com192.168.194.130node1centos7.x
node2.example.com192.168.194.131node2centos7.x
  • 在所有节点上安装kubeadm,kubectl,kubelet。
    • kubeadm: 安装kubernetes集群的安装工具,(安装master和node上的组件)
    • kubectl: 客户端的命令行工具,
    • kubelet: 每个node启动容器的工具。

​ kubeadm 不能帮你安装或者管理 kubeletkubectl, 所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 之间可以存在一个次要版本的偏差,但 kubelet 的版本不可以超过 API 服务器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。

  • 节点要求。
    • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。
    • 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。
    • CPU 2 核心及以上。
    • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。
    • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
    • 开启机器上的某些端口。请参见这里了解更多详细信息。
    • 禁用交换分区。为了保证 kubelet 正常工作,必须禁用交换分区。
      • 例如,sudo swapoff -a 将暂时禁用交换分区。要使此更改在重启后保持不变,请确保在如 /etc/fstabsystemd.swap 等配置文件中禁用交换分区,具体取决于你的系统如何配置。

安装kubernetes集群

基础环境设置

  • 所有节点时间同步
[root@master ~]#ntpdata ntp1.aliyun.com
## 如果没有ntpdate命令,则需要安装ntp
  • 所有节点关闭防火墙
## 关闭防火墙
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@master ~]#
  • 所有节点关闭selinux
## 关闭selinux
[root@master ~]# getenforce
Enforcing
[root@master ~]#
[root@master ~]# setenforce 0
[root@master ~]# getenforce
Permissive
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
  • 所有节点关闭swap
## 临时关闭
[root@master ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         201        1050           9         567        1457
Swap:          2047           0        2047
[root@master ~]# swapoff -a
[root@master ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         200        1051           9         567        1457
Swap:             0           0           0
[root@master ~]#

## 永久关闭挂载
[root@master ~]#sed -i '/swap/ s/^/#/' /etc/fstab
  • 所有节点修改内核参数,开启ip_fword
[root@master ~]#echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@master ~]#sysctl   -p
  • 所有节点 加载内核模块(lvs的负载模块,用于kube-proxy负载均衡器)
[root@master ~]# cat > /etc/sysconfig/modules/ipvs.modules << EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
[root@master modules]# chmod 755 /etc/sysconfig/modules/ipvs.modules
[root@master modules]#
[root@master modules]# bash /etc/sysconfig/modules/ipvs.modules
[root@master modules]#  lsmod |grep "ip_vs|nf_conntrack"
ip_vs_sh               12688  0
ip_vs_wrr              12697  0
ip_vs_rr               12600  0
ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139264  2 ip_vs,nf_conntrack_ipv4
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack
[root@master modules]#

  • 所有节点按照docker

Kubernetes在1.24版本之前,默认使用的是docker为pod中的容器,从v1.24版本之后将不在默认使用,因此仍想要使用docker,则必须安装一个额外的服务 cri-dockerd。 cri-dockerd 是一个基于传统的内置 Docker 引擎支持的项目

  • 默认情况下,Kubernetes 使用 容器运行时接口(Container Runtime Interface,CRI) 来与你所选择的容器运行时交互。如果你不指定运行时,kubeadm 会自动尝试通过扫描已知的端点列表来检测已安装的容器运行时。如果检测到有多个或者没有容器运行时,kubeadm 将抛出一个错误并要求你指定一个想要使用的运行时。

  • Docker Engine 没有实现 CRI, 而这是容器运行时在 Kubernetes 中工作所需要的。 为此,必须安装一个额外的服务 cri-dockerd。 cri-dockerd 是一个基于传统的内置 Docker 引擎支持的项目, 它在 1.24 版本从 kubelet 中移除。

docker安装见此文章:docker安装

安装Kubernetes集群

安装kubeadm,kubectl,kubelet

  • 添加kubernetes的镜像源
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
  • 安装指定版本
[root@master ~]#yum list kubeadm --showduplicates |sort -r
[root@master ~]#yum list kubectl --showduplicates |sort -r
[root@master ~]#yum list kubelet --showduplicates |sort -r

[root@master ~]#yum install -y  kubeadm-1.23.9 kubectl-1.23.9  kublet-1.23.9

本章节以安装1.21.9版本为例

  • 启动kubelet
[root@master ~]#systemctl enable kubelet && systemctl start kubelet

kubeadm初始化集群(master节点操作)

  • 生成初始化集群的配置文件
[root@master ~]# sudo kubeadm config print init-defaults > kubeadm-config.yaml
  • 修改kubedm-config.yml文件
[root@master ~]# cat kubeadm-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.194.128
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: 192.168.194.128
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.21.9
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}
[root@master ~]#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BDismZLb-1683185355141)(D:\学习\学习笔记\图片\95.png)]

  • advertiseAddress: 指定api server的地址
  • name: 指定master的地址或者主机名但是必须能解析到
  • imageRepository: 因为相关组件是以容器的方式进行部署的,这块时指定容器拉取镜像的镜像仓库(这里使用的是阿里的镜像仓库)
  • kubernetesVersion: 指定安装的kubeam的版本(即与我们安装的kubeadm的版本保持一致)
  • serviceSubnet: service服务的地址段;
  • podSubnet: pod的地址段;
  • 初始化集群
## 通过我们生成的配置文件进行初始化
[root@master ~]# kubeadm init --config kubeadm-config.yaml

可能出现的错误1:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2x67EvGB-1683185355142)(D:\学习\学习笔记\图片\96.png)]

  • 该错误涉及到 bridge-nf-call-iptables 内核参数的设置。这个内核参数是必须启用的,以确保 Kubernetes 网络功能的正常运行,echo “1” > /proc/sys/net/bridge/bridge-nf-call-iptables
  • 初始化完成之后打印信息如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LfWhZx9s-1683185355144)(D:\学习\学习笔记\图片\97.png)]

  • export KUBECONFIG=/etc/kubernetes/admin.conf 这个命令是将 Kubernetes 集群的配置文件路径设置为环境变量 KUBECONFIG 的值。这个配置文件通常位于 /etc/kubernetes/admin.conf,它包含了连接到 Kubernetes API Server 所需的证书、密钥和其他配置信息。通过设置 KUBECONFIG 环境变量,您可以让 kubectl 命令自动使用该配置文件进行身份验证和授权。当您运行 kubectl 命令时,它会自动加载 KUBECONFIG 环境变量中指定的配置文件。例如,如果您运行 kubectl get pods 命令,则 kubectl 会自动使用 KUBECONFIG 环境变量中指定的配置文件连接到 Kubernetes API Server 并获取 Pod 列表。

  • mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    • 这组命令用于将 Kubernetes 集群的配置文件复制到当前用户的 ~/.kube 目录,并将其所有权赋予当前用户,以便您可以使用 kubectl 命令与 Kubernetes 集群进行交互。

      具体来说,这组命令执行以下操作:

      1. 使用 mkdir -p $HOME/.kube 命令创建一个名为 .kube 的目录,并将其放置在当前用户的主目录下。如果该目录已存在,则不会执行任何操作。
      2. 使用 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 命令将 Kubernetes 集群的配置文件 /etc/kubernetes/admin.conf 复制到当前用户的 ~/.kube 目录下,文件名为 config。如果当前用户的 ~/.kube 目录下已经存在一个名为 config 的文件,则会提示您是否要覆盖它。
      3. 使用 sudo chown $(id -u):$(id -g) $HOME/.kube/config 命令将 config 文件的所有权赋予当前用户。这可以确保您可以使用 kubectl 命令与 Kubernetes 集群进行交互,而不需要使用 sudo 命令。
  • kubeadm join 192.168.194.128:6443 --token abcdef.0123456789abcdef \
            --discovery-token-ca-cert-hash sha256:f8fb58292ca8ca384216786d03c2b94ab58aa7649fca703f7764cd0466399c8e
    
    • node节点加入kubenetes加入集群的命令
  • 依次执行上述指令
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
cp: overwrite ‘/root/.kube/config’?
[root@master ~]#
[root@master ~]#
[root@master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@master ~]#
  • 查看集群节点信息

此时查看到的节点信息为NotReady,是因为网络插件还没有安装的原因

[root@master ~]# kubectl get nodes
NAME              STATUS   ROLES                  AGE   VERSION
192.168.194.128   NotReady    control-plane,master   13h   v1.21.9
[root@master ~]#

Kubernetes 中的节点状态可以分为以下几种:

  1. Ready:表示节点已经准备好接受 Pod 调度,并且可以正常运行。如果节点状态为 Ready,则 Kubernetes 将在该节点上运行 Pod。
  2. NotReady:表示节点无法正常运行。这种状态可能是由于网络故障、资源不足或其他问题导致的。
  3. Unknown:表示 Kubernetes 无法获取有关节点状态的信息。这种情况通常是由于与节点通信失败或节点组件故障导致的。
  4. SchedulingDisabled:表示节点不接受新的 Pod 调度。这种状态通常是由于管理员手动禁用了节点或节点出现了问题导致的。

安装网络插件flannel(master操作)

  • 使用pod的方式运行flannel
[root@master ~]wget https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
[root@master ~]# kubectl apply -f kube-flannel.yml
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
[root@master ~]#
  • 查看集群信息
此时节点为Ready状态
[root@master ~]# kubectl get nodes
NAME              STATUS   ROLES                  AGE   VERSION
192.168.194.128   Ready    control-plane,master   13h   v1.21.9
[root@master ~]#

##flannel的pod启动正常
[root@master ~]# kubectl get pods -n kube-flannel
NAME                    READY   STATUS    RESTARTS   AGE
kube-flannel-ds-7zsqp   1/1     Running   0          30s
[root@master ~]#
  • flannel网桥也存在

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bVvbavpC-1683185355145)(D:\学习\学习笔记\图片\98.png)]

Node节点加入集群

  • 方式一
## 该指令在初始化集群的时候会生成,
[root@master ~]#kubeadm join 192.168.194.128:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:f8fb58292ca8ca384216786d03c2b94ab58aa7649fca703f7764cd0466399c8e
  • 方式二

    • 生成配置文件
    ## 生成加入集群的配置文件
    [root@node1 ~]# kubeadm config print join-defaults > kube-join.yaml
    
    • 修改配置文件
    [root@node1 ~]# cat kube-join.yml
    apiVersion: kubeadm.k8s.io/v1beta2
    caCertPath: /etc/kubernetes/pki/ca.crt
    discovery:
      bootstrapToken:
        apiServerEndpoint: 192.168.194.128:6443
        token: abcdef.0123456789abcdef
        unsafeSkipCAVerification: true
      timeout: 5m0s
      tlsBootstrapToken: abcdef.0123456789abcdef
    kind: JoinConfiguration
    nodeRegistration:
      criSocket: /var/run/dockershim.sock
      name: 192.168.194.130
      taints: null
    [root@node1 ~]#
    
    1. apiServerEndpoint: 连接apiserver的地址,即master的api地址,这里可以改为192.168.194.128:6443,如果master集群部署的话,这里需要改为集群vip地址
    2. token及tlsBootstrapToken: 连接master使用的token,这里需要与master上的InitConfiguration(生成的kubeadm-config.yaml文件)中的token配置一致
    3. name: node节点的名称,如果使用主机名,需要确保master节点可以解析该主机名。否则的话可直接使用ip地址
    • 执行加入
    [root@node1 ~]# kubeadm join --config kube-join.yml
    
  • 注意事项

    • token会过期,当token过期之后需要手动生成token
    [root@master ~]# kubeadm token create
    muq6w3.fu4ztgk00pxet9k4
    
    • 查看tokne信息
    [root@master ~]# kubeadm token list
    TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GR      OUPS
    abcdef.0123456789abcdef   22h         2023-05-05T09:18:48+08:00   authentication,signing   <none>                                                     system:b      ootstrappers:kubeadm:default-node-token
    muq6w3.fu4ztgk00pxet9k4   23h         2023-05-05T10:25:42+08:00   authentication,signing   <none>                                                     system:b      ootstrappers:kubeadm:default-node-token
    [root@master ~]#
    
    • 将token生成sha256字符串
    [root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    f8fb58292ca8ca384216786d03c2b94ab58aa7649fca703f7764cd0466399c8e
    [root@master ~]#
    

查看集群状态信息

  • 节点信息
[root@master ~]# kubectl get nodes
NAME                STATUS   ROLES                  AGE   VERSION
192.168.194.128     Ready    control-plane,master   81m   v1.21.9
192.168.194.130     Ready    <none>                 74m   v1.23.9
node2.example.com   Ready    <none>                 73m   v1.23.9
[root@master ~]#

我们在work node节点加入到集群后,可能会出现有的显示的是node的ip,有的显示的是node的域名,当想要将域名改为ip,则需要到对应的节点上修改kubelet的配置项。添加–hostname-override参数

[root@node2 ~]# cat  /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --hostname-override=192.168.194.131"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
[root@node2 ~]#
[root@node2 ~]# systemctl restart kubelet.service
[root@node2 ~]#
  • namespace信息
[root@master ~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   82m
kube-flannel      Active   80m
kube-node-lease   Active   82m
kube-public       Active   82m
kube-system       Active   82m
[root@master ~]#
  • pod信息
##  不知道-n(namespqce)的时候,默认为default的命名空间
[root@master ~]# kubectl get pods -n kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
coredns-6f6b8cc4f6-72tvk                  1/1     Running   0          82m
coredns-6f6b8cc4f6-bw9rc                  1/1     Running   0          82m
etcd-192.168.194.128                      1/1     Running   2          82m
kube-apiserver-192.168.194.128            1/1     Running   2          82m
kube-controller-manager-192.168.194.128   1/1     Running   3          82m
kube-proxy-98qnw                          1/1     Running   0          76m
kube-proxy-n957q                          1/1     Running   0          82m
kube-proxy-tgstw                          1/1     Running   0          74m
kube-scheduler-192.168.194.128            1/1     Running   3          82m
[root@master ~]#
  • 查看node详细信息
[root@master ~]# kubectl describe nodes 192.168.194.128
  • 查看pod详细信息
[root@master ~]# kubectl describe pods kube-scheduler-192.168.194.128 -n kube-system

重置集群

  • 删除节点
kubectl drain <node name> --delete-emptydir-data --force --ignore-daemonset
  • 重置 kubeadm 安装的状态
kubeadm reset
  • 重置过程不会重置或清除 iptables 规则或 IPVS 表。如果你希望重置 iptables,则必须手动进行:
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
  • 如果要重置 IPVS 表,则必须运行以下命令:
ipvsadm -C
  • 删除节点:
kubectl delete node <节点名称>

安装dashboard

  • 下载dashboard的yaml文件
[root@master ~]#wget \ https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
  • 修改recommended.yaml文件
  • 默认这个部署文件当中,会单独创建一个名为kubernetes-dashboard的命名空间,并将kubernetes-dashboard部署在该命名空间下。dashboard的镜像来自docker hub官方,所以可不用修改镜像地址,直接从官方获取即可。

  • 但是在默认情况下,dashboard并不对外开放访问端口,因此需要使用nodePort的方式将其端口暴露出来,主要修改如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vO4nc810-1683185355146)(D:\学习\学习笔记\图片\99.png)]

  • 执行安装
[root@master ~]#kubectl apply  -f recommended.yaml
  • 查看安装情况
[root@master ~]# kubectl get namespaces
NAME                   STATUS   AGE
default                Active   5h1m
kube-flannel           Active   4h59m
kube-node-lease        Active   5h1m
kube-public            Active   5h1m
kube-system            Active   5h1m
kubernetes-dashboard   Active   3h24m
[root@master ~]#
[root@master ~]# kubectl get pod -n kubernetes-dashboard
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-7c857855d9-8xjsj   1/1     Running   1          3h24m
kubernetes-dashboard-658b66597c-q65fh        1/1     Running   0          65m
[root@master ~]#
[root@master ~]#
[root@master ~]# kubectl get service -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.109.143.189   <none>        8000/TCP        3h25m
kubernetes-dashboard        NodePort    10.101.172.188   <none>        443:30725/TCP   3h25m
[root@master ~]#

此时kubernetes-dashboard已经监听到宿主机的30725端口

  • 访问kubernetes-dashboard

通过宿主机ip+端口的形式访问:https://192.168.194.128:30725

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLoLcxBO-1683185355147)(D:\学习\学习笔记\图片\100.png)]

登录方式:

  • 选择kubeconfig时:将.kube/config的文件拷贝出来,在上传上去即可;
  • 用token的方式我们可以通过如下指令获取token:
[root@master ~]# kubectl describe secrets -n kubernetes-dashboard  $(kubectl get secrets -n kubernetes-dashboard  |grep kubernetes-dashboard-token |awk '{print $1}') |grep token

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KD60HZdP-1683185355148)(D:\学习\学习笔记\图片\101.png)]

  • 通过该token登入集群以后,发现很多namespace包括一些其他的资源都没有足够的权限查看。这是因为默认我们使用的这个帐户只有有限的权限。我们可以通过对该sa授予cluster-admin权限来解决这个问题。
  • 再次修改recommended.yaml文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P5bMSpRi-1683185355149)(D:\学习\学习笔记\图片\102.png)]

  • 删除并重新创建
[root@master ~]# kubectl delete -f recommended.yaml
namespace "kubernetes-dashboard" deleted
serviceaccount "kubernetes-dashboard" deleted
service "kubernetes-dashboard" deleted
secret "kubernetes-dashboard-certs" deleted
secret "kubernetes-dashboard-csrf" deleted
secret "kubernetes-dashboard-key-holder" deleted
configmap "kubernetes-dashboard-settings" deleted
role.rbac.authorization.k8s.io "kubernetes-dashboard" deleted
clusterrole.rbac.authorization.k8s.io "kubernetes-dashboard" deleted
rolebinding.rbac.authorization.k8s.io "kubernetes-dashboard" deleted
clusterrolebinding.rbac.authorization.k8s.io "kubernetes-dashboard" deleted
deployment.apps "kubernetes-dashboard" deleted
service "dashboard-metrics-scraper" deleted
deployment.apps "dashboard-metrics-scraper" deleted

[root@master ~]#
[root@master ~]#
[root@master ~]# kubectl apply -f recommended.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
[root@master ~]#
[root@master ~]#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9TnvLOBa-1683185355150)(D:\学习\学习笔记\图片\103.png)]


至此kubernetes集群已经安装完毕,但是在实际生产中我们需要保证matser节点高可用,甚至使用外部的etcd高可用,后续我们将详细说明。
er 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
[root@master ~]#
[root@master ~]#


至此kubernetes集群已经安装完毕,但是在实际生产中我们需要保证matser节点高可用,甚至使用外部的etcd高可用,后续我们将详细说明。

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

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

相关文章

C语言-学习之路-05

C语言-学习之路-05 函数函数分类函数的作用 函数的定义函数定义格式 函数名字、形参、函数体、返回值函数调用无参函数调用有参函数调用 函数的声明多文件&#xff08;分文件&#xff09;编程分文件编程 函数 函数分类 C语言程序都是从主函数main()开始执行的。从函数的定义角…

259页11万字智慧水利建设项目解决方案

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 1.1.1 项目建设任务 依托省政务云平台&#xff1b;建立水利专业数据的汇集、共享、交换和水利数据库、数据仓库、数据资源目录与大数据服务等&#xff1b;建立水利大数据分…

OpenGL(五)——变换

目录 一、前言 二、向量 三、矩阵 四、旋转的箱子 4.1 GLM库 4.2 构建 一、前言 前面了解渲染架构中uniform可以传递矩阵变换&#xff0c;如从RGBA到YUV&#xff0c;同时它也可以使物体通过矩阵变换动起来。 二、向量 向量是包含方向和大小的矢量&#xff0c;平面2D坐标可…

一文吃透Tomcat核心知识点

架构 首先&#xff0c;看一下整个架构图。最全面的Java面试网站 接下来简单解释一下。 Server&#xff1a;服务器。Tomcat 就是一个 Server 服务器。 Service&#xff1a;在服务器中可以有多个 Service&#xff0c;只不过在我们常用的这套 Catalina 容器的Tomcat 中只包含一…

在技术圈超卷的当下,学历到底是敲门砖还是枷锁?

前言 最近&#xff0c;突然之间被“孔乙己文学”刷屏了&#xff0c;短时间内“孔乙己文学”迅速走红&#xff0c;孔乙己是中国文学中的一位经典人物&#xff0c;他的长衫被认为是他的象征之一&#xff0c;孔乙己的长衫折射出很多现象&#xff0c;既有社会的&#xff0c;也有教育…

【Linux】进程信号及信号产生

文章目录 一. 生活层面的信号二. 进程信号三. 硬件中断四. 信号产生五. Term&Core1. 核心转储的意义2. 云服务器为什么关闭核心转储3. core dump标志 六. 总结结束语 一. 生活层面的信号 在学习进程信号前&#xff0c;我们不妨认识一下现实中有哪些信号。 日常生活中&#…

净利润下滑13%,帅丰电器已掉队?

近年来&#xff0c;随着市场竞争加剧&#xff0c;厨电行业加速洗牌&#xff0c;超60%杂牌或被淘汰出局&#xff0c;三类品牌全部被清退。而作为毛利最高的厨电细分市场&#xff0c;集成灶行业吸引了大批企业涌入&#xff0c;市场渗透率快速提升&#xff0c;已经超过30%&#xf…

如何入门数据分析

如何入门数据分析&#xff1f; 随着数字经济、大数据时代的发展&#xff0c;数据已然成为当下时代最重要的盈利资源&#xff0c;让企业在做决策和计划方案时更有针对性和依据&#xff0c;能提前预测市场发展方向&#xff0c;做好布局。由此而产生的数据分析岗位也逐渐被更多企业…

亚马逊、Lazada、阿里国际、eBay、Temu、Ozon好消息不断,机会来了

1. 亚马逊第一季度营收1273.58亿美元 同比扭亏为盈 亚马逊2023财年第一季度财报。亚马逊第一季度净销售额为1273.58亿美元&#xff0c;与上年同期的1164.44亿美元相比增长9%&#xff0c;不计入汇率变动的影响为同比增长11%&#xff1b;净利润为31.72亿美元&#xff0c;上年同期…

“智慧交通”转型升级+创新发展策略

随着“互联网交通”的应用创新推陈出新&#xff0c;传统轨道交通行业客户服务中心已难以满足乘客对便捷高效的客户服务需求&#xff1b;节假日人流量激增&#xff0c;客户服务人手不足&#xff0c;交通、站点堵塞、信息更新不及时等问题是常态。因此&#xff0c;“智慧城市”交…

多租户SAAS系统涉及实战解决方案—案例JeecgBoot低代码平台

JeecgBoot免费低代码平台&#xff0c;提供一键切换多租户模式机制&#xff01;快速实现全系统的saas租户方案&#xff0c;通过租户ID进行数据隔离。 租户设计思路 1、开启全系统租户隔离 开启方法 将 org.jeecg.config.mybatis.MybatisPlusSaasConfig#OPEN_SYSTEM_TENANT_CO…

为什么是三次握手和四次挥手

文章目录 为什么是三次握手为什么是四次挥手什么是TIME_WAIT状态解决TIME_WAIT状态引起的bind失败的方法 为什么是三次握手 因为这是双方都有收发的最小次数 握手的目的&#xff1a;确认网络好着没&#xff0c;对方好着没 确认双方主机是否健康&#xff08;双方&#xff09;…

美国访问学者访问J1签证和商务B1签证的区别

美国校方通常希望他国的访问学者申请访问类签证&#xff08;J1&#xff09;&#xff0c;当然也有很少一部分人以商务签证&#xff08;B1&#xff09;的身份入境&#xff0c;知识人网小编就这两种签证的区别做一下简单介绍。 交流访问学者签证&#xff08;J1&#xff09;旨在促进…

UG NX二次开发(C++)-建模-利用UF_CURVE_ask_line_data()获取直线的矢量

文章目录 1、前言2、总体思路3、代码实现3.1 在视图区选择对象3.2 将选择对象转换为直线对象3.3创建获取直线矢量的函数 4、测试效果 1、前言 选择一条直线&#xff0c;获取直线的矢量方向&#xff0c;采用的是获取直线的数据&#xff0c;并根据直线的首末端点计算矢量方向&am…

【TCP/IP 网络模型】

TCP/IP 网络模型 OSI七层模型、TIP/IP四层模型 OSI七层模型 应用层&#xff0c;负责给应用程序提供统一的接口&#xff1b; 表示层&#xff0c;负责把数据转换成兼容另一个系统能识别的格式&#xff1b; 会话层&#xff0c;负责建立、管理和终止表示层实体之间的通信会话&…

Java基础(十五)集合框架

1. 集合框架概述 1.1 生活中的容器 1.2 数组的特点与弊端 一方面&#xff0c;面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用数组存储对象方面具有一些弊端&#xff0c;而Java 集合…

研报精选230504

目录 【行业230504国联证券】食饮农业2022年报与1Q23季报总结&#xff1a;食饮业绩稳步改善&#xff0c;农业低猪价推动去产能 【行业230504中邮证券】美护行业22年&23Q1财报总结&#xff1a;龙头逆境彰显韧性&#xff0c;期待Q2行业加速 【行业230504安信证券】交通运输行…

3. 内存分区模型

一、内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的全局区&#xff1a;存放全局变量和静态变量以及常量栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值&a…

AI落地:程序员如何用AI?

对于程序员来说&#xff0c;真正能提高效率、可落地的AI应用场景都有哪些&#xff1f; 目前已经能切实落地&#xff0c;融入我日常工作生活的有以下几个场景&#xff1a; 开发工作&#xff1a;自然语言生成代码&#xff0c;自动补全代码 日常工作学习&#xff1a;写作、翻译、…

通达信如何检测未来函数?

未来函数可能引用未来发生的数据&#xff0c;对原来的判断进行修改&#xff0c;这会导致信号漂移&#xff0c;比如产生原来没有的信号、原来的信号改变位置或者已经产生的信号消失。 一、未来函数如何偷梁换柱&#xff1f; 单纯讲概念&#xff0c;对未来函数也没有深刻的认识…