云原生(七)、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.hqwc.cn/news/577331.html

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

相关文章

一周学会Django5 Python Web开发-Django5模型定义

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计41条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

黑马点评(Redis实战)项目笔记【10万字!超详细!收藏!】

Redis基础篇 续篇Redis基础篇 知识点参考博客 前言&#xff1a;本文首次完成于语雀文档&#xff0c;发布至个人CSDN分享&#xff0c;全篇内容4万余字&#xff0c;若对您有帮助希望点个赞与收藏&#xff01; 由于缩进格式不兼容等问题&#xff0c;若影响您的观看体验&#xff0c…

‘bash‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

问题描述 运行命令的时候报错&#xff1a;bash 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 解决方案 在anaconda中执行以下命令即可&#xff1a; conda install m2-base 安装完毕后&#xff0c;再运行bash的命令就可以了。

【浅尝C++】使用模板实现泛型编程第二弹=>非类型模板参数/模板特化/模板分离编译详解

&#x1f3e0;专栏介绍&#xff1a;浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 &#x1f3af;每日格言&#xff1a;每日努力一点点&#xff0c;技术变化看得见。 文章目录 非类型模板参数模板的特化概念函数模板特化类模板特化全特化偏特化 模板分离编译分离编译概念模板…

uniapp数组合并函数使用几录

let that { listAll: [1, 2, 3] }; let data [4, 5, 6]; let mergedArray that.listAll.concat(data); console.log(mergedArray); // 输出: [1, 2, 3, 4, 5, 6] console.log(that.listAll); // 输出: [1, 2, 3]&#xff0c;原始数组没有改变 唯有美景&#xff0c;可以抚…

跑spark的yarn模式时RM连不上的情况

在linux控制台跑spark on yarn一个测试案例&#xff0c;日志中总显示RM连yarn服务的时候是&#xff1a;0.0.0.0:8032 具体情况如下图&#xff1a; 我问题出现的原因&#xff0c;总结如下&#xff1a; 1.防火墙没关闭&#xff0c;关闭 2.spark-env.sh这个文件的YARN_CONF_DIR…

程序汪若依微服务华为云Linux部署保姆教程

若依官方有3个版本&#xff0c;程序汪以前已经出了对应的安装部署视频教程 单应用版本 前后分离版本 微服务版本 本视频是若依微服务版本&#xff0c;如果基础的环境软件都不会安装建议看下程序汪的单应用和前后端分离版本教程&#xff0c; 欢迎点击进入 &#xff08;单应…

2024年MathorCup数学建模思路A题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

STM32学习笔记(9_1)- USART串口协议

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期开…

Vue生命周期,从听说到深入理解(全面分析)

每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听&#xff0c;编译模板&#xff0c;挂载实例到 DOM&#xff0c;以及在数据改变时更新 DOM。在此过程中&#xff0c;它也会运行被称为生命周期钩子的函数&#xff0c;让开发者有机会在特定阶…

jmeter中参数加密

加密接口常用的方式有&#xff1a; MD5&#xff0c;SHA&#xff0c;HmacSHA RSA AES&#xff0c;DES&#xff0c;Base64 压测中有些参数需要进行加密&#xff0c;加密方式已接口文档为主。 MD5加密 比如MD5加密的接口文档&#xff1a; 请求URL&#xff1a;http://101.34.221…

2004-3-29-freeRTOS作业

1.总结keil5下载代码和编译代码需要注意的事项 1> 先编译看是否出错、 2> 点击“魔术棒”->Debug->Settings->查看是否成功安装驱动->下载 3> 编写代码记得写在CODE BEGIN和CODE END中间。 2.总结STM32Cubemx的使用方法和需要注意的事项 1> 选择对应…