最新 Kubernetes 集群部署 + flannel 网络插件(保姆级教程,最新 K8S 版本)
资源列表
操作系统 | 配置 | 主机名 | IP | 所需插件 |
---|---|---|---|---|
CentOS 7.9 | 2C4G | k8s-master | 192.168.60.143 | flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictl |
CentOS 7.9 | 2C4G | k8s-node01 | 192.168.60.144 | flannel-cni-plugin、flannel、kubectl、kube-proxy、containerd、pause 、crictl、kubernetes-dashboard |
CentOS 7.9 | 2C4G | k8s-node02 | 192.168.60.145 | flannel-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 版本才正式弃用的。所以很多博主安装 docker 也没啥毛病,但是得注意 k8s 版本的差异 。以下是 k8s 和 docker 版本对应关系以及官网通知:
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.toml1 ) 设置 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:latestImage is up to date for sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85# 查看 nginx 镜像
$ crictl images | grep nginxIMAGE 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.yamlapiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.60.143 # 修改此处为你 master 节点 IP 地址,我的是 192.168.60.143bindPort: 6443 # 默认端口号即可
nodeRegistration:criSocket: /var/run/dockershim.sockname: k8s-master # 修改此处为你主节点的主机名,我的是 k8s-mastertaints:- effect: NoSchedulekey: 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.localserviceSubnet: 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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo 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 nodesNAME 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 wideNAMESPACE 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 nodesNAME 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 wideNAMESPACE 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-systemNAME 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 -ANAMESPACE 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 csNAME 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.yamlspec:type: NodePort # 新增的内容ports:- port: 443targetPort: 8443nodePort: 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-usernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: admin-usernamespace: 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-systemeyJhbGciOiJSUzI1NiIsImtpZCI6InFBcUVIQ3kxUV9YOTlteGhULUxTTHRkT1FaRU02Y3d2Vk1OcWRkaE45eE0ifQ.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
相关文章:

最新 Kubernetes 集群部署 + flannel 网络插件(保姆级教程,最新 K8S 版本)
资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…...

C语言笔记31 •单链表经典算法OJ题-3.反转链表•
反转链表 1.问题 给你单链表的头节点 head,请你反转链表,并返回反转后的链表。 2.代码实现: //3.反转链表 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int …...

网桥与以太网交换机:功能与区别解析
在传统的共享式局域网中,所有站点共享一个公共的传输媒体。随着局域网规模的扩大、网络中站点数目的不断增加,这样的网络通信负载加重,网络效率急剧下降。随着技术的发展、交换技术的成熟和成本的降低,具有更高性能的交换式局域网…...
动态引用的艺术:在Postman中实现自动化的终极指南
🌀 动态引用的艺术:在Postman中实现自动化的终极指南 在API开发和测试中,Postman是一个强大的工具,它提供的动态引用功能可以帮助我们实现自动化和更高效的测试流程。本文将深入探讨如何在Postman中使用动态引用,通过…...

Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-网格布局、拉伸系数,控制控件显示的大小)
目录 一、QVBoxLayout-垂直布局: 1.1QVBoxLayout介绍: 1.2 属性介绍: 1.3细节理解: 二、QHBoxLayout-水平布局: 三、QGridLayout-网格布局: 3.1QGridLayout介绍: 3.2常用方法:…...

图论---无向图中国邮路的实现
开始编程前分析设计思路和程序的整体的框架,以及作为数学问题的性质: 程序流程图: 数学原理: 本质上是找到一条欧拉回路,考虑图中的边权重、顶点的度数以及如何通过添加最少的额外边来构造欧拉回路,涉及到欧…...
Rockchip RK3588 - Rockchip Linux SDK脚本分析
---------------------------------------------------------------------------------------------------------------------------- 开发板 :ArmSoM-Sige7开发板eMMC :64GBLPDDR4 :8GB 显示屏 :15.6英寸HDMI接口显示屏u-boot &a…...
【C++中resize和reserve的区别】
1. resize的用法 改变当前容器内含有元素的数量(size())比如: vector<int> vct;int num vct.size();//之前的元素个数为num vct.resize(len);//现在的元素个数为len如果num < len ,那么容器vct新增len - num个元素&am…...

计算机毕业设计Python深度学习游戏推荐系统 Django PySpark游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设
本论文的主要研究内容如下: 了解基于Spark的TapTap游戏数据分析系统的基本架构,掌握系统的开发方法,包括系统开发基本流程、开发环境的搭建、测试与运行等。 主要功能如下: (1)用户管理模块:…...
Python面试题:如何在 Python 中进行正则表达式操作?
在 Python 中,正则表达式操作可以通过 re 模块来实现。以下是一些常用的正则表达式操作和示例: 1. 导入模块 import re2. 常见操作和示例 a. 匹配 使用 re.match() 来检查字符串的开头是否匹配某个模式。 pattern r\d # 匹配一个或多个数字 strin…...
C#面:简述什么是中间件(Middleware)?
中间件是组装到应⽤程序管道中以处理请求和响应的软件。 每个组件: 选择是否将请求传递给管道中的下⼀个组件。 可以在调⽤管道中的下⼀个组件之前和之后执⾏⼯作。 请求委托(Request delegates)⽤于构建请求管道,处理每个HTTP请…...
AWS Glue 与 Amazon Redshift 的安全通信配置
1. 引言 在 AWS 环境中,确保服务间的安全通信至关重要。本文将探讨 AWS Glue 与 Amazon Redshift 之间的安全通信配置,特别是为什么需要特定的安全组设置,以及如何正确实施这些配置。 2. 背景 AWS Glue:全托管的 ETL(提取、转换、加载)服务Amazon Redshift:快速、完全…...

nginx访问控制
最近部署consul服务,发现consul认证配置比较麻烦,于是上网查询发现nginx支持路由认证,在此做个记录。 1.Nginx访问控制模块类型 基于IP的访问控制:http_access_module基于用户的信任登录:http_auth_basic_module 2.…...

高效应对网络攻击,威胁检测响应(XDR)平台如何提升企业应急响应能力
在数字化时代,企业面临的网络攻击威胁持续增加,如恶意软件、勒索软件、钓鱼攻击、DDoS攻击等。这些威胁不仅危及企业数据安全、系统稳定,还损害了品牌形象和市场信任。随着云计算、大数据、物联网的广泛应用,企业网络攻击面扩大&a…...
多线程问题
什么是线程 线程是cpu调度和执行的单位,一个程序的运行伴随着的是一个进程的执行,而一个进程是由一个或多个线程来完成的,通过cpu调度资源在很短时间切换主线程和子线程并行,交替执行来做到看似多个线程同时进行的状态࿰…...
自动优化:SQL Server数据库自动收缩配置指南
自动优化:SQL Server数据库自动收缩配置指南 在数据库管理中,随着数据的增删,数据库文件的大小会不断变化,导致空间浪费和性能下降。SQL Server提供了自动收缩功能,帮助数据库文件保持最佳状态。本文将深入探讨如何在…...
华为机考真题 -- 密码解密
题目描述: 给定一段"密文"字符串 s, 其中字符都是经过"密码本"映射的,现需要将"密文"解密并且输出映射的规则 (a - i)分别用(1 - 9)表示;(j - z)分别用(10* - 26*)表示约束:映射始终唯…...

ScrapySharp框架:小红书视频数据采集的API集成与应用
引言 随着大数据时代的到来,数据采集成为了互联网企业获取信息的重要手段。小红书作为一个集社交和电商于一体的平台,其丰富的用户生成内容(UGC)为数据采集提供了丰富的资源。本文将介绍如何使用ScrapySharp框架进行小红书视频数…...
PostgreSQL 数据库监控项
在维护和优化 PostgreSQL 数据库时,采集并监控数据库的各种静态和动态指标非常重要。这些指标包括数据库的配置信息、资源使用情况、性能指标等,能够帮助数据库管理员及时发现并解决潜在的问题,从而提高数据库的稳定性和性能。本文提供了一系…...

用python生成词频云图(python实例二十一)
目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.词频云图 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&a…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...