kubernetes--技术文档-真--集群搭建-三台服务器一主二从(非高可用)-三服务器位于同交换机中

在使用k8s之前如果不太熟悉k8s的可以先看这个文章: 

kubernetes--技术文档--基本概念--《10分钟快速了解》_一单成的博客-CSDN博客

三节点相同安装操作:

        1、设置hosts解析

根据角色在三个服务器中运行,设置自己的hostname。

  1. 标识:hostname是用于标识Linux系统的名称。通过修改hostname,你可以更改系统在局域网或互联网中的标识,使其更符合你的需求。
  2. 可读性:有些长而复杂的Linux系统名称可能难以记忆和读取。通过修改hostname,你可以使其更简短、易于记忆和读取。
  3. 管理:在多用户环境中,为了方便管理和区分不同的Linux系统,修改hostname可以帮助你更容易地识别和管理各个系统。

master节点:

hostnamectl set-hostname k8s-master #设置master节点的hostname

slave-1节点

hostnamectl set-hostname k8s-slave1 #设置slave1节点的hostname

slave-2节点

hostnamectl set-hostname k8s-slave2 #设置slave2节点的hostname

在修改了名字后

刷新可看到

 

这个时候已经有自己的名字了。 

在三个服务器上添加hosts解析--配置本地域名

cat >>/etc/hosts<<EOF
masterip k8s-master
slave1ip k8s-slave1
slave2ip k8s-slave2
EOF

        2、 调整系统配置

1、设置安全组开放端口

        注意:如果节点间无安全组限制(内网机器间可以任意访问),可以忽略,否则,至少保证如下端口可通: k8s-master节点:TCP:6443,2379,2380,60080,60081UDP协议端口全部打开 k8s-slave节点:UDP协议端口全部打开

2、设置iptables

注意:首先!iptables不是网卡,而是Linux内核的一个模块,用于管理对网络设备(网卡)的访问。iptables可以配置操作系统的路由表,实现路由过滤、端口转发、NAT等,主要用于管理IPv4数据包的过滤和地址转换。在IPv6中,相应的工具是ip6tables,用于管理IPv6数据包的过滤和地址转换。

在搭建 Kubernetes 集群时,设置iptables主要有两个原因:实现集群内部服务发现和外部访问网络代理。

  1. 实现集群内部服务发现:Kubernetes 使用iptables来设置网络转发规则,将请求转发到后端的 Pod。当一个请求进入 Kubernetes 集群时,iptables 会根据请求的目标 IP 和端口,将请求转发到对应的服务 Pod。这使得集群内部的服务的请求能够被正确地路由和处理。
  2. 外部访问网络代理:Kubernetes 使用iptables来设置外部流量进入集群的代理规则。当一个请求从外部进入 Kubernetes 集群时,iptables 会将请求转发到合适的网关或负载均衡器,从而实现外部对内部服务的访问。

需要注意的是,Kubernetes 还提供了另一个流量转发工具 IPVS (IP Virtual Server)可以用于实现高性能的负载均衡。你可以根据实际场景和需求选择使用 iptables 还是 IPVS。

iptables -P FORWARD ACCEPT

代码说明:

iptables -P FORWARD ACCEPT 是一个iptables命令,用于设置Linux系统中的iptables防火墙的转发规则。

具体来说,-P 选项指定了默认策略,而 FORWARD 是iptables规则链的名字,用于处理经过的流量。在这个例子中,ACCEPT 是默认策略,表示所有经过 FORWARD 链的流量都将被接受(即允许通过)。

换句话说,这个命令设置了所有经过iptables防火墙的流量在 FORWARD 链中的默认行为是允许通过,除非有特定的规则对特定流量进行了阻止。

3、关闭swap

在搭建Kubernetes集群时,建议关闭swap,原因如下:

  1. 性能下降:当内存不足时,Linux会将一部分内存存储到磁盘交换文件中,从而导致性能下降并可能导致应用程序崩溃。而在运行Kubernetes时,内存压力可能很高,因此关闭swap可以避免这种情况。
  2. 容器无法正常工作:在执行大型容器操作时,如果系统启用了swap,可能会导致一些容器被停止或无法正常工作。为避免这种情况,建议在Kubernetes节点上禁用swap。

总之,为了提高Kubernetes集群的整体性能和稳定性,建议在搭建集群时关闭swap

swapoff -a
# 防止开机自动挂载 swap 分区
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

  代码解释:

这段代码是用于关闭 Linux 系统中的 swap 分区的命令。

让我们逐行解释一下:

  1. swapoff -a:该命令会关闭所有已经挂载的 swap 分区。
  2. sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab:这行命令使用了 sed 工具来修改 /etc/fstab 文件。-i 选项表示直接修改输入文件,而不是输出到标准输出。/ swap / 是 sed 的匹配模式,表示只匹配包含 " swap " 的行。s/^\(.*\)$/#\1/g 是 sed 的替换操作,表示将每行的内容替换为在原来的内容前面加上 "#"。换句话说,这行命令将所有包含 " swap " 的行在每行的开头加上 "#",也就是注释掉这些行。

总的来说,这段代码的目的是关闭 swap 分区并防止其在系统重新启动时自动挂载。

4、关闭selinux和防火墙

在搭建 Kubernetes 集群时,建议关闭 SELinux 和防火墙,原因如下:

  1. 防火墙可能会阻止 Kubernetes 节点的网络通信:Kubernetes 需要节点之间的网络通信来正常工作。如果防火墙阻止了这些通信,可能会导致部署失败或集群节点之间无法通信的问题。
  2. SELinux 可能会与 Kubernetes 某些组件的访问控制策略冲突:SELinux 是一个用于提供更高级别的访问控制和安全保护的 Linux 内核模块。然而,在某些情况下,为了方便和实用,需要关闭 SELinux 以放松对系统资源的限制,从而提高系统的灵活性和可用性。

总之,为了确保 Kubernetes 集群的正常运行和简化部署过程,建议在搭建集群时关闭 SELinux 和防火墙。但请注意,这只适用于某些情况下,具体应根据实际情况进行决策。

sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0
systemctl disable firewalld && systemctl stop firewalld

这段代码是用于关闭 SELinux 和防火墙的命令,具体解释如下:

  1. sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config:该命令使用 sed 工具对 /etc/selinux/config 文件进行修改。-ri 选项表示在读取文件的同时进行修改。's#(SELINUX=).*#\1disabled#' 是 sed 的替换命令,它将文件中以 SELINUX= 开头的行替换为 SELINUX=disabled。这样修改后,SELinux 在下次重启后将被禁用。
  2. setenforce 0:该命令会立即将 SELinux 设置为禁用状态,而不需要重启系统。
  3. systemctl disable firewalld && systemctl stop firewalld:这两个命令是使用 systemctl 工具来禁用和停止 firewalld 服务。&& 表示前后两个命令之间是逻辑关系,只有前一个命令成功执行后,后一个命令才会执行。

综上所述,这段代码的目的是立即禁用 SELinux,禁用并停止防火墙服务,从而确保 Kubernetes 集群的正常运行。

 5、修改内核参数

在搭建Kubernetes集群时,修改内核参数可以优化集群的性能和稳定性。以下是一些常见的内核参数调整的原因:

  1. 调整网络性能:面对高并发场景,修改内核参数可以优化网络性能。例如,开启TCP拥塞控制算法,可以提高网络的吞吐量和稳定性。
  2. 避免TIME_WAIT连接过多:在短连接并发量较高的场景中,可能导致TIME_WAIT状态的连接数量累积到超过一定量,从而导致无法新建连接。开启TIME_WAIT复用可以解决这个问题。
  3. 提高文件系统的性能:修改文件系统参数可以优化存储性能,例如增加缓冲区缓存大小、调整延迟分配机制等。
  4. 调整进程调度:修改进程调度的参数可以优化集群中不同任务的调度和资源分配,从而提高整体的性能和稳定性。
  5. 避免内存泄露和死锁问题:调整内核参数可以避免内存泄露和死锁问题,提高系统的稳定性和可靠性。

总之,修改内核参数是为了优化Kubernetes集群的性能和稳定性。具体的参数调整应该根据实际情况进行,建议在搭建集群前进行充分的测试和验证。

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.max_map_count=262144
EOF
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

 代码说明:

这段代码执行了以下操作:

  1. 使用了 cat 命令创建一个名为 k8s.conf 的新文件,该文件位于 /etc/sysctl.d/ 目录下。
  2. <<EOF 是一个 Here 文档 的标记,它告诉 cat 命令从该标记开始读取输入,直到遇到另一个标记 EOF 为止。
  3. 在 Here 文档 中,定义了一些内核参数及其值。这些参数用于配置网络、防火墙、最大映射计数等方面的系统行为。
  4. 输出结束后,再次出现了 EOF 标记,表示 Here 文档 的结束。
  5. 最后,使用 echo 命令将这些参数写入到 /etc/sysctl.d/k8s.conf 文件中。

这些参数的修改和写入文件的目的是为了在系统运行时启用特定的内核行为,以适应 Kubernetes 集群的需求。例如,net.bridge.bridge-nf-call-ip6tables = 1 和 net.bridge.bridge-nf-call-iptables = 1 参数允许通过 br_netfilter 模块启用 IPv4 和 IPv6 的网络过滤。而 net.ipv4.ip_forward=1 则启用了 IP 数据包转发。最后,vm.max_map_count=262144 参数增加了最大映射计数,这对于 Kubernetes 中的大对象(例如大型镜像)有所帮助。

最后,使用 modprobe 命令加载了 br_netfilter 模块,并使用 sysctl 命令将 /etc/sysctl.d/k8s.conf 文件中的参数应用到系统中。这样,修改后的内核参数就会生效,以满足 Kubernetes 集群的需求。

6、设置yum源

在搭建Kubernetes集群时,需要设置yum源是为了确保可以从指定的源获取所需的软件包和组件。Kubernetes依赖于许多软件包和组件,包括Docker、Kubernetes组件、网络插件等。通过设置yum源,你可以指定从可靠的源获取这些软件包和组件,以确保它们的完整性和一致性。

此外,设置yum源还可以提高安装和管理的效率。通过使用yum源,你可以一次性安装多个相关的软件包,而无需单独下载和安装每个软件包。这可以减少安装时间和操作步骤,提高搭建集群的效率。

总之,设置yum源是为了确保Kubernetes集群的稳定性和效率,提供可靠的软件包和组件来源,并简化安装和管理过程。

设置centOS版本源:

curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo

代码解释:

这个命令使用了 curl 工具来下载一个文件,并将其保存到 /etc/yum.repos.d/ 目录下。具体来说,这个命令的含义如下:

  • -o 参数指定了输出文件的名字,这里将其命名为 Centos-7.repo
  • http://mirrors.aliyun.com/repo/Centos-7.repo 是要下载的文件的URL地址。

因此,这个命令将从指定的URL下载一个名为 Centos-7.repo 的文件,并将其保存到 /etc/yum.repos.d/ 目录下。这个文件通常是一个yum源的配置文件,用于指定从哪个源获取CentOS 7的软件包。

注意:!!!

不少同志使用的时候是直接在运行商哪里进行购买的自带了CentOS比如我。

1、可以忽略这个代码不需要进行运行

2、切换到自己的版本源即可

如果你的系统不是CentOS 7,而是其他版本的Linux,你需要找到适合你的系统的yum源配置文件。

通常情况下,不同版本的Linux系统使用的yum源配置文件是不同的。因此,你需要找到适合你系统版本的yum源配置文件。

你可以通过以下几种方式来找到适合你系统的yum源配置文件:

  1. 搜索互联网:在搜索引擎中输入你的系统版本和"yum源配置文件"的关键词,可以尝试找到适合你系统的yum源配置文件。
  2. 从官方网站下载:一些Linux发行版的官方网站会提供适合其系统的yum源配置文件。你可以从官方网站下载相应的文件。
  3. 从镜像站点下载:有些Linux发行版提供了镜像站点,你可以从镜像站点下载适合你系统的yum源配置文件。

下载到适合你系统的yum源配置文件后,你可以使用类似于上述示例中的命令将其保存到 /etc/yum.repos.d/ 目录下。然后,你可以使用yum命令从指定的源安装和更新软件包。

请注意,不同的系统可能需要不同的配置。因此,在替换yum源配置文件之前,请确保你理解该文件的内容,并按照你的系统要求进行正确的配置。

安装Docker CE

curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

这个命令同样使用了 curl 工具,它的作用是从指定的URL下载一个文件,并将其保存到 /etc/yum.repos.d/ 目录下。具体来说,这个命令的含义如下:

  • -o 参数指定了输出文件的名字,这里将其命名为 docker-ce.repo
  • http://mirrors.aliyuncom.net/docker-ce/linux/centos/docker-ce.repo 是要下载的文件的URL地址。

因此,这个命令将从指定的URL下载一个名为 docker-ce.repo 的文件,并将其保存到 /etc/yum.repos.d/ 目录下。这个文件是Docker CE(Docker Community Edition)的yum源配置文件,用于指定从哪个源获取Docker CE的软件包。

请注意,这个命令是针对CentOS系统的特定操作,用于安装Docker CE。如果你使用的是其他Linux发行版,可能需要下载对应的Docker CE的yum源配置文件,并使用类似的方式进行安装。

配置Kubernetes的yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

这段代码是在Linux系统上配置Kubernetes的yum源。具体来说,它的作用是:

  1. 打开一个新的文件 /etc/yum.repos.d/kubernetes.repo,这个文件是用来存储yum源的配置信息。
  2. 在该文件中,定义了一个名为[kubernetes]的yum源,其中包含了以下信息:
    • name: 这个yum源的名字是"Kubernetes"。
    • baseurl: 这个yum源的URL地址是http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    • enabled: 这个yum源是启用的,值为1。
    • gpgcheck: 这个yum源会检查软件包的GPG签名,值为0表示不检查。
    • repo_gpgcheck: 这个yum源会检查源的GPG签名,值为0表示不检查。
    • gpgkey: 指定GPG密钥的URL地址,这里提供了两个地址,用于获取公钥和软件包公钥。
  3. 最后,EOF是一个结束标记,表示上述配置信息已经结束。

通过这段代码,我们就可以配置好Kubernetes的yum源,从而使用yum命令从该源安装和更新Kubernetes相关的软件包。

清理yum缓存

 yum clean all && yum makecache

yum clean all 命令是用于清理yum缓存的。它会删除缓存目录中的所有文件,以便yum可以重新获取这些文件。

yum makecache 命令则是用于生成yum缓存的。它会从yum源中下载软件包列表和元数据,并将其存储在缓存目录中,以便在后续的软件包安装和查询操作中可以更快地访问这些数据。

因此,yum clean all && yum makecache 这条命令的作用是先清理yum缓存,然后再重新生成缓存,以获取最新的软件包列表和元数据。这样可以加快软件包安装和查询的速度,并减少对网络连接的访问。

 3、安装docker

查看所有可用的版本

yum list docker-ce --showduplicates | sort -r

 容器运行时环境还是使用大家熟知的Docker,只是在k8s v1.24以后需要额外安装cri-dockerd, k8s才能够正常识别到Docker。这里也可以使用其它容器运行时工具,比如containerd, CRI-O等可以根据个人喜好使用,只是截至目前Docker在国内占的比重依然可以说是一枝独秀。

安装最新的docker 

yum install docker-ce

配置docker加速

创建docker文件夹

mkdir -p /etc/docker

编辑docker配置文件

vi /etc/docker/daemon.json

配置文件中内容

{
  "insecure-registries": [    
    "masterip!!!:5000" 
  ],                          
  "registry-mirrors" : [
    "https://8xpk5wnt.mirror.aliyuncs.com"
  ]
}

启动docker

systemctl enable docker && systemctl start docker

4、部署kubernetes

文章链接

 1、安装 kubeadm, kubelet 和 kubectl

yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 --disableexcludes=kubernetes

版本更换1.20.9 -使用公网搭建集群


sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

查看kubeadm 版本

kubeadm version

设置kubelet开机启动

systemctl enable kubelet 

2、初始化配置文件(只在master节点中执行,初始化配置文件)

kubeadm config print init-defaults > kubeadm.yaml

kubeadm config print init-defaults > kubeadm.yaml 这个代码是用来生成一个默认的 kubeadm.yaml 配置文件的命令。

让我们来详细解释一下这个命令的含义:

  • kubeadm: 这是 Kubernetes 的一个命令行工具,用于管理 Kubernetes 集群的初始化和维护。
  • config: 这是 kubeadm 工具的一个子命令,用于管理 Kubernetes 集群的配置。
  • print init-defaults: 这是 config 子命令的一个选项,用于打印出 Kubernetes 集群初始化的默认配置。
  • > kubeadm.yaml: 这是一个重定向操作,它将 kubeadm config print init-defaults 命令的输出写入到一个名为 kubeadm.yaml 的文件中。

因此,这个命令的含义是:使用 kubeadm 工具的 config 子命令的 print init-defaults 选项来获取 Kubernetes 集群初始化的默认配置,并将这个配置写入到一个名为 kubeadm.yaml 的文件中。这个文件可以用于后续的 Kubernetes 集群初始化操作。

更改配置文件

vim kubeadm.yaml

需要修改的配置行

请修改为图中的信息

1、配置id地址

advertiseAddress: master的ip!!  # apiserver地址,因为单master,所以配置master的节点内网IP

 2、修改为阿里云的镜像

imageRepository: registry.aliyuncs.com/google_containers  # 修改成阿里镜像源

 3、配置网卡网络,需要注意这个本来在文件中是没有的需要新添加 

 内网使用下面这个网段

podSubnet: 10.244.0.0/16

只在master执行 

1、下载镜像

首先查看使用的镜像列表

kubeadm config images list --config kubeadm.yaml

 得到如下列表

registry.aliyuncs.com/google_containers/kube-apiserver:v1.16.0
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.16.0
registry.aliyuncs.com/google_containers/kube-scheduler:v1.16.0
registry.aliyuncs.com/google_containers/kube-proxy:v1.16.0
registry.aliyuncs.com/google_containers/pause:3.1
registry.aliyuncs.com/google_containers/etcd:3.3.15-0
registry.aliyuncs.com/google_containers/coredns:1.6.2

下载镜像到本地

kubeadm config images pull --config kubeadm.yaml

 注意:

如果出现不可用的情况,请使用如下方式来代替

1、还原kubeadm.yaml的imageRepository

...
imageRepository: k8s.gcr.io
...

## 查看使用的镜像源
kubeadm config images list --config kubeadm.yaml
k8s.gcr.io/kube-apiserver:v1.16.0
k8s.gcr.io/kube-controller-manager:v1.16.0
k8s.gcr.io/kube-scheduler:v1.16.0
k8s.gcr.io/kube-proxy:v1.16.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.15-0
k8s.gcr.io/coredns:1.6.2

 2、使用docker hub中的镜像源来下载,注意上述列表中要加上处理器架构,通常我们使用的虚拟机都是amd64

$ docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.16.0
$ docker pull mirrorgooglecontainers/etcd-amd64:3.3.15-0
...
$ docker tag mirrorgooglecontainers/etcd-amd64:3.3.15-0 k8s.gcr.io/etcd:3.3.15-0

 2、初始化master节点

kubeadm init --config kubeadm.yaml

kubernetes--技术文档--安装kubernetes集群报错[kubelet-check] Initial timeout of 40s passed.(已经解决)_一单成的博客-CSDN博客

注意:

        可能出现报错为有一个组件无法正常启动。

 如果成功会出现如下信息:

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

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 内网ip:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:e277fcb92e605f89b24ee3a0f904519c6ffae56a5c5f0a4768737ae3de83eb79 

保存数据 下面有用

kubeadm join 内网ip:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:e277fcb92e605f89b24ee3a0f904519c6ffae56a5c5f0a4768737ae3de83eb79 

接下来按照上述提示信息操作,配置 kubectl客户端认证

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

这个时候使用  

kubectl get nodes

这个代码查看节点还是处于notReady状态,因为还没有配置网络插件。

在slave中部署

1、添加slave节点到集群中(在slave节点中部署)

使用上面保存的指令在进行添加slave节点

kubeadm join ip:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:e277fcb92e605f89b24ee3a0f904519c6ffae56a5c5f0a4768737ae3de83eb79

在master中执行

安装flannel插件

wget https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

修改配置指定网卡名称,大概在文件的和170行,190行,添加一行配置:

$ vi kube-flannel.yml
...      
      containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.11.0-amd64
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=eth0  # 如果机器存在多网卡的话,指定内网网卡的名称,默认不指定的话会找第一块网
        resources:
          requests:
            cpu: "100m"
...

安装flannel网络插件 

# 先拉取镜像,此过程国内速度比较慢
$ docker pull quay.io/coreos/flannel:v0.11.0-amd64
# 执行flannel安装
$ kubectl create -f kube-flannel.yml

 设置master节点是否可调度(可选)

默认部署成功后,master节点无法调度业务pod,如需设置master节点也可以参与pod的调度,需执行:

kubectl taint node k8s-master node-role.kubernetes.io/master:NoSchedule-

 验收!!!

操作节点: 在master节点(k8s-master)执行

kubectl get nodes  #观察集群节点是否全部Ready

 创建测试nginx服务

kubectl run  test-nginx --image=nginx:alpine

 查看pod是否创建成功,并访问pod ip测试是否可用

kubectl get po -o wide

 访问子节点看是否能返回页面代码!

curl 内网ip

部署可视化页面 

下载!

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta5/aio/deploy/recommended.yaml

 修改配置文件

vi recommended.yaml
修改Service为NodePort类型
......
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort  # 加上type=NodePort变成NodePort类型的服务

 访问地址,本例为30133端口

kubectl create -f recommended.yaml
结果:
kubectl -n kubernetes-dashboard get svc
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.105.62.124   <none>        8000/TCP        31m
kubernetes-dashboard        NodePort    10.103.74.46    <none>        443:30133/TCP   31m

 浏览器访问 https://62.234.133.177:30133,其中62.234.133.177为master节点的外网ip地址,chrome目前由于安全限制,测试访问不了,使用firefox可以进行访问。

建ServiceAccount进行访问

vi admin.conf

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: admin
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kubernetes-dashboard

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kubernetes-dashboard

$ kubectl create -f admin.conf
$ kubectl -n kubernetes-dashboard get secret |grep admin-token
admin-token-fqdpf                  kubernetes.io/service-account-token   3      7m17s
# 使用该命令拿到token,然后粘贴到
$ kubectl -n kubernetes-dashboard get secret admin-token-fqdpf -o jsonpath={.data.token}|base64 -d
eyJhbGciOiJSUzI1NiIsImtpZCI6Ik1rb2xHWHMwbWFPMjJaRzhleGRqaExnVi1BLVNRc2txaEhETmVpRzlDeDQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi1mcWRwZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjYyNWMxNjJlLTQ1ZG...

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用CSS实现一个拖拽排序效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现拖拽排序效果的CSS和JavaScript示例⭐ HTML 结构⭐ CSS 样式 (styles.css)⭐ JavaScript 代码 (script.js)⭐ 实现说明⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦…

shell和Python 两种方法分别画 iostat的监控图

在服务器存储的测试中,经常需要看performance的性能曲线&#xff0c;这样最能直接观察HDD或者SSD的性能曲线。 如下这是一个针对HDD跑Fio读写的iostat监控log,下面介绍一下分别用shell 和Python3 写画iostat图的方法 1 shell脚本 环境:linux OS gnuplot工具 第一步 :解析iosta…

数据结构,二叉树,前中后序遍历

二叉树的种类 最优二叉树 最优二叉树画法 排序取最小两个值和&#xff0c;得到新值加入排序重复1&#xff0c;2 前序、中序和后序遍历是树形数据结构&#xff08;如二叉树&#xff09;中常用的遍历方式&#xff0c;用于按照特定顺序遍历树的节点。这些遍历方式在不同应用中有不…

pycharm远程连接docker容器

pycharm远程连接docker容器 1.根据镜像创建容器2.进入容器3.修改容器的root密码4. 容器安装openssh-server和openssh-client5.修改SSH配置文件6.重启ssh服务7. 退出测试8.配置pycharm并连接docker容器9. 选择docker环境 1.根据镜像创建容器 sudo docker run -itd --nameconn_t…

华为数通方向HCIP-DataCom H12-821题库(单选题:01-20)

第01题 下面关于OSPF邻居关系和邻接关系描述正确的是 A、邻接关系由 OSPF的 DD 报文维护 B、OSPF 路由器在交换 Hello 报文之前必须建立邻接关系 C、邻居关系是从邻接关系中选出的为了交换路由信息而形成的关系 D、并非所有的邻居关系都可以成为邻接关系 答案&#xff1a;D 解析…

从业务层的代码出发,去排查通用框架代码崩溃的问题

目录 1、问题说明 1.1、Release下崩溃&#xff0c;Debug下很难复现 1.2、用Windbg打开dump文件&#xff0c;发现崩溃在通用的框架代码中 2、进一步分析 2.1、使用IDA查看汇编代码尝试寻找崩溃的线索 2.2、在Windbg中查看相关变量的值 2.3、查看最近代码的修改记录&#…

5.6.webrtc三大线程

那今天呢&#xff1f;我们来介绍一下web rtc的三大线程&#xff0c;那为什么要介绍这三大线程呢&#xff1f;最关键的原因在于web rtc的所有其他线程都是由这三大线程所创建的。那当我们将这三个线程理解清楚之后呢&#xff1f;我们就知道其他线程与它们之间是怎样关系&#xf…

PDF怎么转成PPT文件免费?一个软件解决

随着科技的不断发展和进步&#xff0c;电子文档已经成为我们日常工作和学习中不可或缺的一部分。PDF作为一种跨平台的文件格式&#xff0c;以其可靠性和易读性而备受推崇。然而&#xff0c;在某些情况下&#xff0c;我们可能需要PDF怎么转成PPT文件免费&#xff0c;以便更好地展…

day24

复制目录到指定路径 file-App下的src目录复制到 D:/aaa public static void copy(File src, File dest) throws IOException {//0. 创建出目标路径if (!dest.exists()){dest.mkdirs();}//0.0 判断dest是否存在&#xff0c;如果不存在&#xff0c;创建爱你出来&#xff0c;不能复…

糖尿病视网膜病变,黄斑病变,年龄相关检测研究(Matlab代码)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

DataWindowHTTP在linux环境的安装和测试

DataWindowHTTP在linux环境的安装和测试 *此非必要文档&#xff0c;如果在window环境使用&#xff0c;则无需参考。对于linux os&#xff0c;apache&#xff0c;php安装熟悉的朋友&#xff0c;也无需参考此文档的安装部分&#xff0c;只需要参考配置部分即可。 *最后修改日期…

图片怎么转换成pdf格式?可以试试这样转换

图片怎么转换成pdf格式&#xff1f;图片转换成PDF格式是一个常见的需求&#xff0c;无论是为了方便存储还是为了分享文件&#xff0c;将图片转换成PDF格式都是一个不错的选择。有许多软件和在线工具可以帮助你完成这个任务&#xff0c;下面就给大家介绍一款转换工具。 【迅捷PD…

两款开箱即用的Live2d

目录 背景第一款&#xff1a;开箱即用的Live2d在vue项目中使用html页面使用在线预览依赖文件地址配置相关参数成员属性源码 模型下载 第二款&#xff1a;换装模型超多的Live2d在线预览代码示例源码 模型下载 背景 从第一次使用服务器建站已经三年多了&#xff0c;记得那是在2…

统一git使用方法,git状态变迁图,git commit提交规范

目录 说明 统一git使用方法 git状态变迁图 git commit 提交规范 说明 多次工作中多名员工不懂git多次技术分享&#xff0c;自行查资料学习git并使用&#xff0c;会出现使用各种偏僻的命令&#xff0c;异常问题无法解决&#xff1b;或出现带url的git合并提交。主要是学的不…

抖音短视频矩阵系统源码开发搭建技术开源分享

前言&#xff1a;抖音矩阵号/抖音短视频SEO矩阵系统源码开发&#xff0c;优化排名。 短视频获客系统支持短视频智能剪辑、短视频定时发布&#xff0c;短视频排名查询及优化&#xff0c;智能客服等&#xff0c;那么短视频seo系统开发时需要开发哪些功能呢&#xff1f;今天我就跟…

【CSS Grid网格布局】常用属性,示例代码解读

Grid布局是一种二维布局系统&#xff0c;可以将页面划分为行和列&#xff0c;并将元素放置在这些行和列的交叉点上。以下是Grid布局的一些常用属性&#xff1a; grid-template-columns/grid-template-rows&#xff1a;用于定义网格的列和行的大小和数量。可以指定具体的尺寸值…

STP知识总结

目录 生成树协议 导致问题 生成树 存在算法 1、802.1D 接口状态 收敛时间 结构变化 802.1D 缺点 2、PVST cisco私有 3、PVST 缺点 4、快速生成树 快速原理 边缘接口 5、MSTP/MST/802.1S 生成树协议 生成树协议是一种工作在OSI网络模型中第二层(数据链路层…

(排序) 剑指 Offer 51. 数组中的逆序对 ——【Leetcode每日一题】

❓剑指 Offer 51. 数组中的逆序对 难度&#xff1a;困难 在数组中的两个数字&#xff0c;如果前面一个数字大于后面的数字&#xff0c;则这两个数字组成一个逆序对。输入一个数组&#xff0c;求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制&#xff…

生产环境下的终极指南:使用 Docker 部署 Nacos 集群和 MySQL

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

3种清除logo的方法,使其干净整洁 自然无痕

信息爆炸的时代&#xff0c;我们每天都和图片打交道经常会遇到一些带有水印的图片。这些水印可能是品牌的标志或者是版权信息&#xff0c;但有时候它们会干扰到我们对图片的欣赏和使用。那么&#xff0c;怎么去掉图片logo水印呢? 毕竟影响图片美感&#xff0c;使用也不方便&a…