kubernetes--技术文档-真--集群搭建-三台服务器一主二从(非高可用)-三服务器位于同交换机中
在使用k8s之前如果不太熟悉k8s的可以先看这个文章:
kubernetes--技术文档--基本概念--《10分钟快速了解》_一单成的博客-CSDN博客
三节点相同安装操作:
1、设置hosts解析
根据角色在三个服务器中运行,设置自己的hostname。
- 标识:hostname是用于标识Linux系统的名称。通过修改hostname,你可以更改系统在局域网或互联网中的标识,使其更符合你的需求。
- 可读性:有些长而复杂的Linux系统名称可能难以记忆和读取。通过修改hostname,你可以使其更简短、易于记忆和读取。
- 管理:在多用户环境中,为了方便管理和区分不同的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主要有两个原因:实现集群内部服务发现和外部访问网络代理。
- 实现集群内部服务发现:Kubernetes 使用iptables来设置网络转发规则,将请求转发到后端的 Pod。当一个请求进入 Kubernetes 集群时,iptables 会根据请求的目标 IP 和端口,将请求转发到对应的服务 Pod。这使得集群内部的服务的请求能够被正确地路由和处理。
- 外部访问网络代理: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,原因如下:
- 性能下降:当内存不足时,Linux会将一部分内存存储到磁盘交换文件中,从而导致性能下降并可能导致应用程序崩溃。而在运行Kubernetes时,内存压力可能很高,因此关闭swap可以避免这种情况。
- 容器无法正常工作:在执行大型容器操作时,如果系统启用了swap,可能会导致一些容器被停止或无法正常工作。为避免这种情况,建议在Kubernetes节点上禁用swap。
总之,为了提高Kubernetes集群的整体性能和稳定性,建议在搭建集群时关闭swap
swapoff -a
# 防止开机自动挂载 swap 分区
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
代码解释:
这段代码是用于关闭 Linux 系统中的 swap 分区的命令。
让我们逐行解释一下:
swapoff -a
:该命令会关闭所有已经挂载的 swap 分区。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 和防火墙,原因如下:
- 防火墙可能会阻止 Kubernetes 节点的网络通信:Kubernetes 需要节点之间的网络通信来正常工作。如果防火墙阻止了这些通信,可能会导致部署失败或集群节点之间无法通信的问题。
- SELinux 可能会与 Kubernetes 某些组件的访问控制策略冲突:SELinux 是一个用于提供更高级别的访问控制和安全保护的 Linux 内核模块。然而,在某些情况下,为了方便和实用,需要关闭 SELinux 以放松对系统资源的限制,从而提高系统的灵活性和可用性。
总之,为了确保 Kubernetes 集群的正常运行和简化部署过程,建议在搭建集群时关闭 SELinux 和防火墙。但请注意,这只适用于某些情况下,具体应根据实际情况进行决策。
sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0
systemctl disable firewalld && systemctl stop firewalld
这段代码是用于关闭 SELinux 和防火墙的命令,具体解释如下:
sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
:该命令使用sed
工具对/etc/selinux/config
文件进行修改。-ri
选项表示在读取文件的同时进行修改。's#(SELINUX=).*#\1disabled#'
是 sed 的替换命令,它将文件中以SELINUX=
开头的行替换为SELINUX=disabled
。这样修改后,SELinux 在下次重启后将被禁用。setenforce 0
:该命令会立即将 SELinux 设置为禁用状态,而不需要重启系统。systemctl disable firewalld
&&systemctl stop firewalld
:这两个命令是使用systemctl
工具来禁用和停止firewalld
服务。&&
表示前后两个命令之间是逻辑关系,只有前一个命令成功执行后,后一个命令才会执行。
综上所述,这段代码的目的是立即禁用 SELinux,禁用并停止防火墙服务,从而确保 Kubernetes 集群的正常运行。
5、修改内核参数
在搭建Kubernetes集群时,修改内核参数可以优化集群的性能和稳定性。以下是一些常见的内核参数调整的原因:
- 调整网络性能:面对高并发场景,修改内核参数可以优化网络性能。例如,开启TCP拥塞控制算法,可以提高网络的吞吐量和稳定性。
- 避免TIME_WAIT连接过多:在短连接并发量较高的场景中,可能导致TIME_WAIT状态的连接数量累积到超过一定量,从而导致无法新建连接。开启TIME_WAIT复用可以解决这个问题。
- 提高文件系统的性能:修改文件系统参数可以优化存储性能,例如增加缓冲区缓存大小、调整延迟分配机制等。
- 调整进程调度:修改进程调度的参数可以优化集群中不同任务的调度和资源分配,从而提高整体的性能和稳定性。
- 避免内存泄露和死锁问题:调整内核参数可以避免内存泄露和死锁问题,提高系统的稳定性和可靠性。
总之,修改内核参数是为了优化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
代码说明:
这段代码执行了以下操作:
- 使用了
cat
命令创建一个名为k8s.conf
的新文件,该文件位于/etc/sysctl.d/
目录下。 <<EOF
是一个 Here 文档 的标记,它告诉cat
命令从该标记开始读取输入,直到遇到另一个标记EOF
为止。- 在 Here 文档 中,定义了一些内核参数及其值。这些参数用于配置网络、防火墙、最大映射计数等方面的系统行为。
- 输出结束后,再次出现了
EOF
标记,表示 Here 文档 的结束。 - 最后,使用
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源配置文件:
- 搜索互联网:在搜索引擎中输入你的系统版本和"yum源配置文件"的关键词,可以尝试找到适合你系统的yum源配置文件。
- 从官方网站下载:一些Linux发行版的官方网站会提供适合其系统的yum源配置文件。你可以从官方网站下载相应的文件。
- 从镜像站点下载:有些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.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
这段代码是在Linux系统上配置Kubernetes的yum源。具体来说,它的作用是:
- 打开一个新的文件
/etc/yum.repos.d/kubernetes.repo
,这个文件是用来存储yum源的配置信息。 - 在该文件中,定义了一个名为
[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地址,这里提供了两个地址,用于获取公钥和软件包公钥。
- 最后,
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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou 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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo 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-flannelimage: quay.io/coreos/flannel:v0.11.0-amd64command:- /opt/bin/flanneldargs:- --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-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443targetPort: 8443selector:k8s-app: kubernetes-dashboardtype: 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: adminannotations:rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccountname: adminnamespace: kubernetes-dashboard---
apiVersion: v1
kind: ServiceAccount
metadata:name: adminnamespace: 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...
相关文章:

kubernetes--技术文档-真--集群搭建-三台服务器一主二从(非高可用)-三服务器位于同交换机中
在使用k8s之前如果不太熟悉k8s的可以先看这个文章: kubernetes--技术文档--基本概念--《10分钟快速了解》_一单成的博客-CSDN博客 三节点相同安装操作: 1、设置hosts解析 根据角色在三个服务器中运行,设置自己的hostname。 标识…...
高性能MySQL实战(三):性能优化
大家好,我是 方圆。这篇主要介绍对慢 SQL 优化的一些手段,而在讲解具体的优化措施之前,我想先对 EXPLAIN 进行介绍,它是我们在分析查询时必要的操作,理解了它输出结果的内容更有利于我们优化 SQL。为了方便大家的阅读&…...
198. 打家劫舍
题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放…...

Pydev·离线git包
Pydev离线git包 1.下载离线git包:eclipse.egit.repository-4.4.0.201606070830-r.zip 2.将解压后目录:eclipse.egit.repository-4.4.0.201606070830-r\plugins下的jar文件放到 ide\eclipse\plugins目录下 3.重启pydevIDE 百度搜索站长工具:h…...
Vue-12.集成postcss.config.js
PostCSS 介绍 PostCSS 是一个用于处理样式的工具,可以通过插件来定制其行为。以下是一些常用的 PostCSS 插件和 API 的介绍: Autoprefixer: 这是一个流行的 PostCSS 插件,用于自动添加浏览器前缀,以确保您的样式在不同浏览器中具…...

基于前端技术原生HTML、JS、CSS 电子病历编辑器源码
电子病历系统采取结构化与自由式录入的新模式,自由书写,轻松录入。实现病人医疗记录(包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。)的保存、管理、传输和重现,取代手写纸张病历。不仅实现了纸…...

Linux环境下远程访问SVN服务:SVN内网穿透的详细配置与操作指南
文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…...

创建k8s operator
目录 1.前提条件 2.进一步准备 2.1.安装golang 2.2.安装code(vscode的linux版本) 2.3.安装kubebuilder 3.开始创建Operator 3.1.什么是operator? 3.2.GV & GVK & GVR 3.3.创建operator 3.3.1. 生成工程框架 3.3.2.生成api(GVK) …...

python模拟登入某平台+破解验证码
概述 python模拟登录平台,遇见验证码识别!用最简单的方法seleniumda破解验证码,来自动登录平台 详细 python用seleniumxpath模拟登录破解验证码 先随便找个小说平台用户登陆 - 书海小说网用户登陆 - 书海小说网用户登陆 - 书海小说网 准…...

【图像分割】理论篇(2)经典图像分割网络基于vgg16的Unet
UNet 是一种用于图像分割任务的深度学习架构,最早由 Olaf Ronneberger、Philipp Fischer 和 Thomas Brox 在2015年的论文 "U-Net: Convolutional Networks for Biomedical Image Segmentation" 中提出。UNet 在医学图像分割等领域取得了显著的成功&#x…...

vue插入重复的html内容
vue添加重复的html内容是通过绑定一个数组来v-for循环实现的。 效果展示: 首先创建数组,里面为重复内容的数量,里面默认存在一个初始值。 然后通过v-for来绑定这个数组,循环数据。 通过添加点击事件,来增加或删除数组…...

计算机网络-物理层(三)-信道的极限容量
计算机网络-物理层(三)-信道的极限容量 当信号在信道中传输失真不严重时,在信道的输出端,这些信号可以被识别 当信号在信道中,传输失真严重时,在信道的输出端就难以识别 造成失真的因素 码元传输速率信号传输距离噪声干扰传输媒…...

Http/Websocket协议的长连接和短连接的错误认识详细解读(史上最通俗)
从一个问题聊起: Http/Websocket 都称为一种协议,能用现实中的例子来解释协议吗? AI 举例: 您(客户端): 您坐在餐厅桌子上,想点一份菜单。 服务员(服务器)…...

两两交换链表中的节点
你存在,我深深的脑海里~ 题目: 示例: 思路: 这个题有点类似于反转一个单链表,不同的地方在于这个题不全反转,所以我们不同的地方在于此题多用了一个prve指针保存n1的前一个节点,以及头的改变&a…...

HTTP与RPC的取舍
HTTP与RPC的取舍 HTTP和RPC都是常用的网络通信协议,它们各有优劣。选择何种协议,主要取决于应用的需求和场景。 HTTP和RPC都有各自的优点和缺点,首先我们对两种协议进行一个总结。 HTTP协议图 HTTP的优点: 广泛的支持࿱…...
微前端学习(上)
一、课程目标 微前端概念;现有方案利弊;Single-spa实现原理;掌握使用qiankun搭建微应用;二、课程大纲 微前端背景现在web应用面临的问题微前端的价值微前端应用具备哪些能力微前端解决方案有哪些基于qiankun的实践1、微前端背景 2014年: Martin Fowler和James Lewis共同提…...
【Axure视频教程】标签版多选下拉列表
今天教大家在Axure里如何制作标签版多选下拉列表的原型模板,该模板用中继器制作,制作完成后使用也方便,只需要在中继器表格里维护选项信息,即可自动生成交互效果,包括显示隐藏选项列表,选中和取消选中选项&…...
Sharepoint2013必备软件安装路径
SP2013是最后一个有foundation版本的,后续各个版本都是server版,要买lisence。免费的可以用,但安装组件有些链接已经失效了,自己手动下载的路径备份一下,已经下载好的完整版,在文章最后可以直接下载&#x…...
C++day4(关系运算符的重载)
关系运算符重载的作用:可以让两个自定义类型对象进行对比操作。 代码实现关系运算符的重载: #include <iostream>using namespace std;class Person {// friend const Person operator(const Person &L, const Person &R); private:int …...

农业水价综合改革系统主要组成
一、系统概述 农业水价改革灌区信息化系统主要由感知采集层、网络传输层、系统应用层等部分组成。通过无线技术、感知层技术与新型应用的有效结合,可以用于各种业务的传送,充分满足灌区监测站间的物与物互联,农业生产的自动化和信息化相结合。…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...