云原生(七)、Kubernetes初学 + 裸机搭建k8s集群

Kubernetes简介

Kubernetes(通常简称为K8s)是一个开源的容器编排平台,最初由Google设计和开发,现在由Cloud Native Computing Foundation(CNCF)维护。它旨在简化容器化应用程序的部署、扩展和管理。

Kubernetes这个名字源于希腊语,意为"舵手"或"飞行员”。
k8s这个缩写是因为k和s之间有八个字符
Google在 2014年开源了Kubernetes项目,Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的容器编排工具还有docker swarm/mesos等,但kubernetes应用最为广泛,社区更为活跃。

官网: https://kubernetes.io/zh-cn/

为什么要使用 Kubernetes

当你的应用只是跑在一台机器,直接一个 docker+ docker-compose 就够了,方便轻松当你的应用需要跑在 3,4台机器上,你依旧可以每台机器单独配置运行环境+负载均衡;当你应用访问数不断增加,机器逐渐增加到十几台、上百台、上千台时,每次加机器、软件更新、版本回滚,都会变得非常麻烦、痛不欲生这时候,Kubernetes 就可以一展身手了。

它是一个全新的基于容器技术的分布式架构领先方案,是谷歌十几年依赖大规模应用容器技术的经验积累和升华的一个重要成果。若是咱们的系统设计遵循了Kubernetes的设计思想,那么传统系统架构中那些和业务没有多大关系的底层代码或功能模块,均可以马上从咱们的视线消失,咱们没必要再费心于负载均衡器和部署实施问题,没必要再考虑引用或本身开发一个复杂的服务治理框架,没必要再头疼于服务监控和故障处理模块的开发。使用Kubernets提供的解决方案,咱们节省了超过30%的开发成本, 同时能够将精力更加集中于业务自己,并且因为Kubernetes提供了强大的自动化机制,因此系统后期的运维难度和运维成本也大幅度下降。

Kubernetes是一个开放的开发平台。没有限定任何编程接口,因此不管是lav、Go、(++仍是用Pvthon编写的服务,均可以毫无困难地映射为Kubernetes的service,并经过标准的TCP通讯协议进行交互。此外,因为Kubernetes平台对现有的编程语言、编程框架、中间价没有任何侵入性,所以现有的系统很容易改造升级并迁移到Kubernetes平台上。

IT行业历来都是一个由新技术驱动的行业。

新兴的容器化技术当前已经被不少公司所采用,其从单机走向集群已成为必然,而云计算的蓬勃发展正在加速这一进程。Kubernetes做为当前惟被业界普遍承认和看好的容器分布式系统解决方案,能够预见,在将来几年内,会有大量的新系统选择它,无论这些系统是运行在企业本地服务器或者是被托管到公有云上。

在Kubernetes中,您可以定义您的应用程序的期望状态(例如,需要多少个副本、应该使用哪些资源等),Kubernetes会负责确保实际状态与之匹配。它可以自动扩展、调度和管理容器化应用程序,使得应用程序的部署和运行变得更加简单和高效。

以下是为什么要使用Kubernetes的几个原因:

  1. 自动化容器化应用程序管理:Kubernetes允许您定义您的应用程序的期望状态,并负责确保它在集群中的实际状态与之匹配。它可以自动扩展、调度和管理容器化应用程序,使得应用程序的部署和运行变得更加简单和高效。

  2. 高可用性:Kubernetes提供了各种机制来确保您的应用程序在集群中具有高可用性。它可以自动重启失败的容器、替换不健康的节点,并在应用程序需要时自动扩展。

  3. 容器编排:Kubernetes可以帮助您有效地管理大量的容器,并为它们提供资源,例如CPU、内存和存储。它提供了强大的调度功能,可以根据您的需求将容器部署到集群中的适当节点上。

  4. 服务发现和负载均衡:Kubernetes提供了内置的服务发现和负载均衡功能,使得您的应用程序可以轻松地相互通信,并确保流量能够平衡地分布到集群中的各个实例上。

  5. 可移植性:Kubernetes可以在各种云平台(如AWS、Azure、Google Cloud等)以及本地数据中心中运行,这使得您可以轻松地在不同的环境中部署和迁移应用程序。

  6. 社区支持和生态系统:Kubernetes拥有庞大且活跃的开源社区,这意味着您可以从丰富的文档、教程和第三方工具中受益。此外,Kubernetes还有一个庞大的生态系统,包括各种附加组件和工具,如监控、日志记录、安全性等方面的解决方案。

综上所述,Kubernetes是一个强大的容器编排平台,可以帮助您简化和自动化容器化应用程序的部署、管理和扩展,提高应用程序的可用性、可靠性和可扩展性。

Kubernetes设计架构

Kubernetes集群= master node + N work node (多主多从)

Kubernetes中包含了许多的新概念,它通过整合资源,提供了一套便于应用部署的方案及实现,极大减少了系统运维的工作量。

官方设计架构图:请添加图片描述
Kubernetes通常是集群化部署,一个Kubernetes集群由一组被称作节点 (Node)的机器组成,一个节点可以理解为一台服务器,这些节点上运行Kubernetes所管理的容器化应用。集群具有至少一个控制节点(MasterNode)和若干工作节点(WorkNode),节点可以是物理机或者虚拟机。
控制节点包含了控制平面(Contro Plane),控制平面中的组件用来管理整个集群,工作节点用来托管对应的工作负载Pod。
一般来说节点上都会包含kubelet、kube-proxy等组件以及容器运行时。
需要知道的一些概念:

  • 控制平面:让我们从Kubernetes 集群的神经中枢(即控制平面)开始说起。在这里,我们可以找到用于控制集群的Kubernetes 组件以及一些有关集群状态和配置的数据。这些核心Kubernetes 组件负责处理重要的工作,以确保容器以足够的数量和所需的资源运行。控制平面会一直与您的计算机保持联系。集群已被配置为以特定的方式运行,而控制平面要做的就是确保万无一失。
  • kube-apiserver:如果需要与您的Kubernetes 集群进行交互,就要通过API。Kubernetes APl是Kubernetes 控制平面的前端,用于处理内部和外部请求。AP!服务器会确定请求是否有效,如果有效,则对其进行处理。您可以通过 REST 调用、kubect 命令行界面或其他命令行工具(例如 kubeadm)来访问 API。
  • kube-scheduler:您的集群是否状况良好?如果需要新的容器,要将它们放在哪里?这些是 Kubernetes 调度程序所要关注的问题。调度程序会考虑容器集的资源需求(例如 CPU 或内存)以及集群的运行状况。随后,它会将容器集安排到适当的计算节点。
  • kube-controler-manager:控制器负责实际运行集群,而 Kubernetes 控制器管理器则是将多个控制器功能合而为一。控制器用于查询调度程序,并确保有正确数量的容器集在运行。如果有容器集停止运行,另一个控制器会发现并做出响应,控制器会将服务连接至容器集,以便让请求前往正确的端点。还有一些控制器用于创建帐户和 API访问令牌。
  • etcd:配置数据以及有关集联状态的信息位于 etcd(一个键值存储数据库)中、etcd 采用分布式、容错设计,被视为集群的最终事实来源。
  • 容器集Pod:容器集是 Kubernetes 对象模型中最小、最简单的单元。它代表了应用的单个实例。每个容器集都由一个容器(或一系列紧密耦合的容器)以及若干控制容器运行方式的选件组成。容器集可以连接至持久存储,以运行有状态应用。
  • 容器运行时引擎:为了运行容器,每个计算节点都有一个容器运行时引擎。比如 Docker,但 Kubernetes 也支持其他符合开源容器运动(OCI)标准的运行时,例如 rkt和 CRI-O。
  • kubelet:每个计算节点中都包含一个 kubelet,这是一个与控制平面通信的微型应用。kubelet可确保容器在容器集内运行。当控制平面需要在节点中执行某个操作时,kubelet 就会执行该操作。
  • kube-proxy:每个计算节点中还包含kube-proxy,这是一个用于优化Kubernetes 网络服务的网络代理。kube-proxy 负责处理集群内部或外部的网络通信。

minikube安装

徒手搭建过k8s的同学都晓得其中的熟熬,复杂的认证,配置环节相当折磨人,出错率相当高,而minikube就是为解决这个问题而衍生出来的工具,minikube可以在单机环境下快速搭建可用的k8s集群,非常适合测试和本地开发,现有的大部分在线k8s实验环境也是基于minikube的。

可以在minikube上体验kubernetes的相关功能。

minikube基于go语言开发,可以在单机环境下快速搭建可用的k8s集群,快速启动,消耗机器资源较少,可在你的笔记本电脑上的虚拟机内轻松创建单机版 Kubernetes 集群,非常适合测试和本地开发。

Minikube架构

Minikube 是一种用于在本地机器上运行 Kubernetes 的工具,它旨在为开发人员提供一个简单的方式来学习和测试 Kubernetes 集群。Minikube 的架构相对简单,主要由以下几个组件组成:

  1. minikube 命令行工具:Minikube 提供了一个命令行工具,允许用户启动、停止和管理本地的 Kubernetes 集群。该工具还提供了许多有用的功能,如配置虚拟化驱动程序、设置网络代理等。

  2. 虚拟化驱动程序:Minikube 使用虚拟化技术在本地机器上创建一个虚拟的 Kubernetes 环境。它支持多种虚拟化驱动程序,包括 VirtualBox、Hyper-V、VMware 和 KVM 等,用户可以根据自己的需求选择合适的驱动程序。

  3. Kubernetes 组件:Minikube 在虚拟化环境中启动一个单节点的 Kubernetes 集群,包括 Master 和 Node 组件。其中 Master 组件包括 API Server、Scheduler、Controller Manager 和 etcd 等,而 Node 组件包括 kubelet、kube-proxy 和容器运行时(如 Docker)等。

  4. Addon 组件:Minikube 还支持在 Kubernetes 集群中启用一些额外的插件或功能,如 Dashboard、Heapster、Ingress Controller 等。这些组件可以通过 minikube addons 命令来启用或禁用。

  5. kubectl:虽然 kubectl 不是 Minikube 的直接组成部分,但它是 Kubernetes 的命令行工具,用户可以使用它与 Minikube 集群进行交互,例如创建、管理和监视 Kubernetes 资源等。

Minikube 的架构相对简单,它提供了一个便捷的方式来在本地机器上运行 Kubernetes 集群,并且可以与 kubectl 等 Kubernetes 相关工具无缝集成,使开发人员能够更轻松地学习、开发和测试基于 Kubernetes 的应用程序。

1、docker安装

参考往期docker相关的文章 https://blog.csdn.net/baidu_39340547/article/details/136746565

2、安装minikube

官方地址: https://minikube.sigs.k8s.io/docs/start/】

根据自己的系统选择对应的安装即可。请添加图片描述
下面是博主的mac系统安装后的minikube提示。

xxxxx@xxxx ~ % curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64
sudo install minikube-darwin-arm64 /usr/local/bin/minikube% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100 87.5M  100 87.5M    0     0  10.2M      0  0:00:08  0:00:08 --:--:-- 13.4M
Password:
xxxxx@xxxx ~ % minikube start
😄  Darwin 14.2.1 (arm64) 上的 minikube v1.32.0
✨  根据现有的配置文件使用 docker 驱动程序
👍  正在集群 minikube 中启动控制平面节点 minikube
🚜  正在拉取基础镜像 ...> gcr.io/k8s-minikube/kicbase...:  410.58 MiB / 410.58 MiB  100.00% 13.18 M
🏃  正在更新运行中的 docker "minikube" container ...
🐳  正在 Docker 24.0.7 中准备 Kubernetes v1.28.3…
🔎  正在验证 Kubernetes 组件...▪ 正在使用镜像 gcr.io/k8s-minikube/storage-provisioner:v5
🌟  启用插件: storage-provisioner, default-storageclass❗  /usr/local/bin/kubectl 的版本为 1.25.9,可能与 Kubernetes 1.28.3 不兼容。▪ 想要使用 kubectl v1.28.3 吗?尝试使用 'minikube kubectl -- get pods -A' 命令
🏄  完成!kubectl 现在已配置,默认使用"minikube"集群和"default"命名空间
xxxxx@xxxx ~ % minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

3、命令操作

  • 进入minikube命令
minikube ssh

进入后会发现,minikube内部是一个docker环境。请添加图片描述

  • 了解部分k8s命令
    • kubectl cluster-info 查看集群信息
    • kubectl get node 查看k8s的所有节点信息
    • kubectl get pods -A 正在运行的容器
  • minikube的可视化界面 启动命令 minikube dashboard请添加图片描述
  • minikube stop 停止运行

k8s搭建集群

1、环境准备

3台服务器,需要内网可通信。安装docker

安装k8s前的系统环境准备,官方要求

# 节点之中不可以有重复的主机名,mac地址等,设置成不同的hostname
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2#关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld#将SElinux设置为permissive模式,禁用
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcin$/SELINUX=permissive/' /etc/selinux/config# 关闭swap分区
sudo swapoff -a
sudo sed -ri 's/.*swap.*/#&/' /etc/fstab# 允许 iptables 检查桥接流量(所有节点)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOFcat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
EOFsudo sysctl --system

2、安装k8s三大组件

安装k8s的集群三大件 kubelet、kubeadm、kubectl

  • kubelet:用于初始化集群的指令
  • kubeadm:在集群中的每个节点上用来启动Pod和容器等
  • kubectl:用来与集群通信的命令工具

安装步骤参考阿里开园的镜像kubernetes站:https://developer.aliyun.com/mirror/kubernetes

#centos安装命令
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet#查看版本信息
kubectl version[root@k8s-node2 ~]# kubectl version
Client Version: v1.28.8
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
The connection to the server localhost:8080 was refused - did you specify the right host or port?

3、安装CRI环境

CRI即容器运行时接口

在 Kubernetes v1.24及更早版本中,我们使用docker作为容器引擎在k8s上使用时,依赖一个dockershimn的内置k8s组件;k8s v1.24发行版中将dockershim组件给移除了;取而代之的就是cri-dockerd(当然还有其它容器接口);简单讲CRI就是容器运行时接口(Container RuntimeInterface,CRl),也就是说cri-dockerd就是以docker作为容器引擎而提供的容器运行时接口;即我们想要用docker作为k8s的容器运行引擎我们需要先部署好cri-dockerd;用cri-dockerd来与kubelet交互,然后再由cri-dockerd和docker api交互,使我们在k8s能够正常使用docker作为容器引擎;

#下载
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4.amd64.tgz#解压 授权
tar xvf cri-dockerd-*.amd64.tgz
cp -r cri-dockerd/ /usr/bin/
chmod +x /usr/bin/cri-dockerd/cri-dockerd# 写入配置文件
cat > /usr/lib/systemd/system/cri-docker.service <<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
ExecReload=/bin/ki11 -S HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
Ki11Mode=process[Install]
WantedBy=multi-user.target
EOF#写入cri-docker的socket配置文件
cat > /usr/lib/systemd/system/cri-docker.socket <<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker[Insta11]
WantedBy=sockets.target
EOF#重启前先确认docker是启动的
#当你新增或修改了某个单位文件(如.service文件、..socket文件等)需要运行该命令来刷新systemd对该文件的配置
systemctl daemon-reload
#启用并立即启动cri-docker.service单元。
systemctl enable --now cri-docker.service
#显示docker.service单元的当前状态,包括运行状态、是否启用等信息
systemctl status cri-docker.service

4、初始化master节点

安装并初始化master节点

#为所有机器添加master节点的域名映射,这里的ip:192.168.2.3是服务器的内网ip
echo "192.168.2.3 cluster-master" >> /etc/hosts
#测试是否成功
ping cluster-master#主节点初始化
#注意修改apiserver的地址为master节点的ip
# 注意service、pod的网络节点不能和master网络ip重叠
kubeadm init \
--apiserver-advertise-address=192.168.2.3 \
--control-plane-endpoint=cluster-master \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.28.8 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.169.0.0/16 \
--cri-socket unix:///var/run/cri-dockerd.sock \

成功安装,并通过它的代码提示添加节点

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/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou 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/#加入主节点
You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:kubeadm join cluster-master:6443 --token ttj34m.m2ys7of3cd4zn5fa \--discovery-token-ca-cert-hash sha256:0fdb24f014029b6ac8e5a40e198448bbc537b1a5003368971bd829cdc7a4f8ae \--control-plane #加入从节点
Then you can join any number of worker nodes by running the following on each as root:kubeadm join cluster-master:6443 --token ttj34m.m2ys7of3cd4zn5fa \--discovery-token-ca-cert-hash sha256:0fdb24f014029b6ac8e5a40e198448bbc537b1a5003368971bd829cdc7a4f8ae \--cri-socket unix:///var/run/cri-dockerd.sock \  #这一行单独自己补的,因为我们使用了cri

5、初始化worker节点

使用加入worker节点的命令,搭建一主两从的部署结构

[root@k8s-node2 ~]# kubeadm join cluster-master:6443 --token ttj34m.m2ys7of3cd4zn5fa \
>         --discovery-token-ca-cert-hash sha256:0fdb24f014029b6ac8e5a40e198448bbc537b1a5003368971bd829cdc7a4f8ae \
>         --cri-socket unix:///var/run/cri-dockerd.sock \
> 
[preflight] Running pre-flight checks[WARNING FileExisting-tc]: tc not found in system path[WARNING Hostname]: hostname "k8s-node2" could not be reached[WARNING Hostname]: hostname "k8s-node2": lookup k8s-node2 on 100.125.1.250:53: no such host
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

6、部署网络插件 calico

# 下载yaml文件
curl https://docs.tigera.io/archive/v3.25/manifests/calico.yaml -O#更新文件中的内容
vim calico.yaml
#要修改的修改内容,解开注释,并修改ip- name: CALICO_IPV4POOL_CIDRvalue: "192.169.0.0/16"#更新calico.yaml的网卡信息
# 先查看自身网卡信息
[root@k8s-master ~]# cd /etc/sysconfig/network-scripts/
[root@k8s-master network-scripts]# ll
total 20
-rw-r--r--. 1 root root 86 Jul 17  2023 ifcfg-eth0
# ifcfg-eth0 中的eth0就是网卡名称#更新文件中的内容
vim calico.yaml
#要修改的修改内容
- name: CLUSTER_TYPEvalue: "k8s,bgp"
- name: IP_AUTODETECTION_METHODvalue: "interface=eth0"#执行文件,执行出错了的话,注意文件的缩进问题
kubectl apply -f calico.yaml

检查节点是否全部成功 kubectl get nodes

#检查节点是否全部成功
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   21h   v1.28.8
k8s-node1    Ready    <none>          21h   v1.28.8
k8s-node2    Ready    <none>          21h   v1.28.8

查看所有的Pod kubectl get pod -A

[root@k8s-master ~]# kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS              RESTARTS   AGE
kube-system   calico-kube-controllers-658d97c59c-q9px6   0/1     ContainerCreating   0          12m
kube-system   calico-node-6phlz                          0/1     Running             0          2m48s
kube-system   calico-node-j7hj4                          0/1     Running             0          2m48s
kube-system   calico-node-vgx4f                          0/1     Running             0          2m48s
kube-system   coredns-6554b8b87f-bfkpj                   0/1     ContainerCreating   0          21h
kube-system   coredns-6554b8b87f-wp5bl                   0/1     ContainerCreating   0          21h
kube-system   etcd-k8s-master                            1/1     Running             0          21h
kube-system   kube-apiserver-k8s-master                  1/1     Running             0          21h
kube-system   kube-controller-manager-k8s-master         1/1     Running             0          21h
kube-system   kube-proxy-9qgxw                           1/1     Running             0          21h
kube-system   kube-proxy-wp7pw                           1/1     Running             0          21h
kube-system   kube-proxy-x57ts                           1/1     Running             0          21h
kube-system   kube-scheduler-k8s-master                  1/1     Running             0          21h

7、总结

以上的安装主要是master节点所需,work节点的服务器只需要安装k8s的三大组件即可。

Dashboard安装(初学使用)

git地址:https://github.com/kubernetes/dashboard

#下载并使用
# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml[root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/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

由于我们是一主两从的结构,无法直接使用上面的yaml文件内容。因为它需要多个master节点。

# 将这个文件下载到本地https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
# 修改一下内容
# 修改完成后重新本地执行 kubectl apply -f recommended.yaml 
spec:type: NodePortports:- port: 443targetPort: 8443nodePort: 31443selector:k8s-app: kubernetes-dashboard

请添加图片描述
访问集群中的任何节点IP。在该页面凭空输入thisisunsafe。完成后进入控制台界面请添加图片描述
登录需要token,在服务器中创建。

[root@k8s-master ~]# vim dash-token.yaml
[root@k8s-master ~]# cat dash-token.yaml 
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
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-dashboardlabels:kubernetes.io/cluster-service: "true"addonmanager.kubernetes.io/mode: Reconcile[root@k8s-master ~]# kubectl apply -f dash-token.yaml 
clusterrolebinding.rbac.authorization.k8s.io/admin created
serviceaccount/admin created#获取令牌token
[root@k8s-master ~]# kubectl create token admin --namespace kubernetes-dashboard
eyJhbGciOiJSUzI1NiIsImtpZCI6InZBOXpWcU52NXhJY2FvMmF4NU5lUzZfNXBlSDB1UU0zRmdWNElxZ0VtOVkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzExNzA3MTM0LCJpYXQiOjE3MTE3MDM1MzQsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbiIsInVpZCI6IjExMjBjMzFhLWYxOTQtNDE2Yi05ZDFhLTY2NjdjNDVkYTA1ZCJ9fSwibmJmIjoxNzExNzAzNTM0LCJzdWIiOiJgsszeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4ifQ.Qm521S7wFn4jny5ozeHyFyrsnSZWW-Gv_aZ-KDwxbFV9J3_UoyIWwTBpl9Pvj-Q2bogTOf_QAv5slcUhMCtQnD9pEgQo7vItpzbEkSH1QC6cA-QJ4R8rrM_7ezSqRLvy6bzO47Dop5taBJCZdo2HXoNbbMTo0tn9TKFG7A1uoUYs6G1w5T_UdV-REp2SGyfNOE1d3wl2qWSgj49AnVZvDN3-wmKryZkKf6hDbNKygKhxGd3-rJU3yT0L1xWApK0e76cxzEnLtsSuafOvrPcctmIy4AOF50ckoQYP3oqLdiYZ59ARhHv-6brxoKk9BUJzyyBONuHFnOO0AIENWjTtjw
[root@k8s-master ~]# 

输入token后成功访问可视化界面请添加图片描述

总结

我们完成了对kubernetes的简单了解,也在裸机中完成了kubernetes的安装,接下来将逐次学习了解kubernetes中的知识点。(一些命令和如何完成yaml文件的书写)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity类银河恶魔城学习记录11-7 p109 Aplly item modifiers源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemData_Equipment.cs using System.Collections; using System.Collecti…

如何检查电脑的最近历史记录?这里提供详细步骤

如果你怀疑有人在使用你的计算机,并且你想查看他们在做什么,下面是如何查看是否有访问内容的痕迹。 如何检查我的计算机的最近历史记录 要检查计算机的最近历史记录,应该从web浏览器历史记录开始,然后移动到文件。但是,可以修改或删除浏览器历史记录,也可以隐藏Windows…

牛角工具箱源码 轻松打造个性化在线工具箱,附带系统搭建教程

这是一款在线工具箱程序&#xff0c;您可以通过安装扩展增强她的功能 通过插件模板的功能&#xff0c;您也可以把她当做网页导航来使用~ &#x1f38a; 环境要求 PHP > 7.2.5 MySQL > 5.7 fileinfo扩展 使用Redis缓存需安装Redis扩展 去除禁用函数proc_open、putenv、s…

C语言:文件操作

前言&#xff1a;为什么使用文件? 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运行程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进行持久…

day22.二叉树part08

day22.二叉树part08 235.二叉搜索树的最近公共祖先 原题链接 代码随想录链接 思路&#xff1a;因为本题是二叉搜索树&#xff0c;利用它的特性可以从上往下进行递归遍历树&#xff0c;这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间…

基于 SymPy 的反函数求解

原文&#xff1a;https://blog.iyatt.com/?p14396 例一 f(x) 2x 3 这个函数很简单&#xff0c;可以看出它的反函数是&#xff08;令 yf(x) &#xff09;&#xff1a;$$x\frac{y-3}{2}$$ 使用 SymPy 求解可以采用这样的思路&#xff1a; 已知函数 f(x)2x3, 令 y f(x), 即构…

FMEA与智能机器人:提升机器人可靠性与安全性的关键

随着科技的飞速发展&#xff0c;智能机器人已经深入到我们生活的方方面面&#xff0c;从工业生产到家庭服务&#xff0c;从深海探险到太空探索&#xff0c;处处都有它们的身影。然而&#xff0c;随着应用的日益广泛&#xff0c;机器人系统的复杂性和不确定性也在增加&#xff0…

【JavaEE】Thread类中run和start的区别

文章目录 先说结论Run方法Start方法 先说结论 当你想要创建一个新的线程并执行某些任务时&#xff0c;你应该重写run方法以提供任务的具体实现&#xff0c;并通过调用start方法来启动新线程 run方法包含了线程应该执行的代码&#xff0c;但直接调用它并不会启动新的线程。 s…

pip永久修改镜像地址

修改命令&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/ 效果&#xff1a; 会在C:\Users\PC(用户名)\AppData\Roaming\pip目录下新增或修改文件pip.ini 文件内容&#xff1a; [global] index-url https://pypi.tuna.tsinghua.e…

OSCP靶场--Zipper

OSCP靶场–Zipper 考点(php zip:// rce[文件上传] CVE-2021-4034提权7z 通配符提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.249.229 -sV -sC -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-29 07:40 EDT …

电动汽车充放电V2G模型(Matlab代码)

目录 1 主要内容 1.1 模型背景 1.2 目标函数 1.3 约束条件 2 部分代码 3 效果图 4 下载链接 1 主要内容 本程序主要建立电动汽车充放电V2G模型&#xff0c;采用粒子群算法&#xff0c;在保证电动汽车用户出行需求的前提下&#xff0c;为了使工作区域电动汽车尽可能多的…

【CTFshow 电子取证】套的签到题

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

政安晨:专栏目录【TensorFlow与Keras机器学习实战】

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 本篇是作者政安晨的专栏《TensorFlow与Keras机器…

linux:线程同步

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言线程同步条件变量接口简单示例pthread_cond_wait为什么要有mutex伪唤醒问题的解决 (if->while) 总结 前言 本文作为我对于线程同步知识总结 线程同步 同步&…

uniapp对接萤石云 实现监控播放、云台控制、截图、录像、历史映像等功能

萤石云开发平台地址&#xff1a;文档概述 萤石开放平台API文档 (ys7.com) 萤石云监控播放 首先引入萤石云js js地址&#xff1a;GitHub - Ezviz-OpenBiz/EZUIKit-JavaScript-npm: 轻应用npm版本&#xff0c;降低接入难度&#xff0c;适配自定义UI&#xff0c;适配主流框架 vi…

速通汇编(二)汇编mov、addsub指令

一&#xff0c;mov指令 mov指令的全称是move&#xff0c;从字面上去理解&#xff0c;作用是移动&#xff08;比较确切的说是复制&#xff09;数据&#xff0c;mov指令可以有以下几种形式 无论哪种形式&#xff0c;都是把右边的值移动到左边 mov 寄存器&#xff0c;数据&#…

JavaScript极速入门(1)

初识JavaScript JavaScript是什么 JavaScript(简称JS),是一个脚本语言,解释型或者即时编译型语言.虽然它是作为开发Web页面的脚本语言而著名,但是也应用到了很多非浏览器的环境中. 看似这门语言叫JavaScript,其实在最初发明之初,这门语言的名字其实是在蹭Java的热度,实际上和…

打PTA (15分)(JAVA)

目录 题目描述 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 题解 题目描述 传说这是集美大学的学生对话。本题要求你做一个简单的自动问答机&#xff0c;对任何一个问句&#xff0c;只要其中包含 PTA 就回答 Yes!&#xff0c;其…

JavaScript高级 —— 学习(一)

目录 一、作用域 &#xff08;一&#xff09;局部作用域 1.函数作用域 2.块作用域 &#xff08;二&#xff09;全局作用域 二、垃圾回收机制 GC &#xff08;一&#xff09;生命周期 1.内存分配 2.内存使用 3.内存回收 4.特殊情况——内存泄漏&#xff1a; 注意&…

Manjaro 安装全新 Linux 版微信,从此告别 Wine

目前已经基本上使用 Manjaro 来工作&#xff0c;而工作离不开微信作为日常的工作沟通工具。因为微信官方一直没有 Linux 版本的&#xff0c;所以之前都只能够使用 Wine 版本&#xff0c;然后踩了不少坑&#xff0c;但还算能勉强使用。 最近听说微信终于要发布 Linux 版本的&am…