云原生(七)、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.mzph.cn/news/787081.shtml

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

相关文章

IPC 进程间通信

IPC InterProcess Communication The concept of IPC Each process has a differnt user addess space,and local variables 各自看不见,so 进程间通信 need kernel(内核), so a buffer is opened in the kernel,process 1 copies data from user space to this buffer,and …

Linux:运营商在网络中扮演的角色

文章目录 ip目前的问题ip目前的几种解决方案私有ipVS公有ip运营商再谈ip划分运营商的角度看ip 本篇总结的是运营商在网络中扮演的角色 ip目前的问题 在目前看来&#xff0c;ip最大的问题是ip号不够用了&#xff0c;那这个问题如何解决呢&#xff1f; 在之前的内容中有子网掩…

朗之万方程,机器学习与液体中的粒子运动

目录 一、说明二、朗之万方程的诞生2.1 牛顿力学2.2 流体中的随机运动 三、小质量物体布朗运动方程四、布朗运动的Python代码五、稳定性讨论5.1 波尔兹曼分布5.2 梯度下降算法 六、随机梯度下降&#xff08;SGD&#xff09;和小批量梯度下降七、机器学习与物理&#xff0c;作为…

加密软件VMProtect教程:使用脚本-功能

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

最大连续1的个数||

又用到滑动窗口&#xff0c;关键在于要维持窗口内0的数量在k内 #include<stdio.h> #include<string.h>int Max(int a,int b){return (a>b)?a:b; }int findMaxConsecutiveOnes(int* nums,int numsSize,int k){int left 0;int right 0;int flag 0;//记录包含…

系统设计理念:满足设计要求

在今天的文章中,我们将层层剥离并深入探讨系统设计要求的本质。 让我们了解系统设计的支柱以及如何创建强大且有弹性的应用程序。 什么是好的设计? 在我们深入讨论技术细节之前,让我们先讨论一下什么是好的设计。 当我们谈论系统架构中的良好设计时,我们关注几个关键原则:…

初始C语言最后一章《编译、链接与预处理详解》

前言 感谢老铁们的陪伴和支持&#xff0c;初始C语言专栏在本章内容也是要结束了&#xff0c;这创作一路下来也是很不容易&#xff0c;如果大家对 Java 后端开发感兴趣&#xff0c;欢迎各位老铁来我的Java专栏&#xff01;当然了&#xff0c;我也会更新几章C语言实现简单的数据结…

C++中的面向对象到底是什么

C中的面向对象到底是什么 对象嘛&#xff0c;就和大家都有的对象一样&#xff0c;两只眼睛、一个嘴巴、两条腿…… 对不起跑题了&#xff0c;C的面向对象中的对象可不是显示中的对象哦&#xff0c;但是有一些相似之处&#xff0c;有对象的同学可以参考着去学习C面向对象的概念…

HackTheBox-Machines--Builder

文章目录 1 端口扫描2 测试思路3 漏洞测试 Builder测试过程 1 端口扫描 nmap -sC -sV 10.129.230.2202 测试思路 系统开启了22和8080端口&#xff0c;22端口无账号密码&#xff0c;测试方向主要从8080的jenkins服务开始测试。 在测试开源系统时&#xff0c;可以下载源代码或本地…

3、jvm基础知识(三)

如何判断堆上的对象没有被引用&#xff1f; 常见的有两种判断方法&#xff1a;引用计数法和可达性分析法。 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&#xff0c;取消引用时减1。 引用计数法的优点是实现简单&#xff0c;缺点有两点&#xff1…

电机选型与直线模组(简化版)

2-1电机分类和普通电机选型 1、电机及其原理的基本认知&#xff1a; 电动机我们平时简称电机&#xff0c;大部分情况下指的都是通电后&#xff0c;输出轴会旋转运动的设备。即将电能转换为机械能&#xff0c;供我们使用以驱动机构运行。电机简单的讲&#xff0c;其实就是一个…

梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码

源码简介 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容&#xff1a;修复播放器接口问题&#xff0c;把接口本地化&#xff0c;但是集成外链播放器…

【Qt】常用控件(输入类)

目录 一、Line Edit二、Text Edit三、ComBo四、DateTimeEdit五、Slider 一、Line Edit QLineEdit 用来表示单行输入框&#xff0c;可以输入一段文本&#xff0c;但是不能换行。 属性说明test输入框中的文本inputMask输入内容格式约束maxLength最大长度frame是否添加边框echoM…

harbor api v2.0

harbor api v2.0 v2.0 v2.0 “harbor api v2.0”与v1区别较大&#xff0c;此处harbor也做了https。另外&#xff0c;通过接口拿到的数据也是只能默认1页10个&#xff0c;所以脚本根据实际情况一页页的循环抓取数据 脚本主要用于统计repo(仓库)、image&#xff0c;以及所有镜像…

【新手适用】手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN二: 如何训练模型,内附详细损失、准确率、均值计算

手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN&#xff08;新手适用&#xff09;一&#xff1a; model.py&#xff1a;创建模块-CSDN博客 从零开始实现一个基于Pytorch的卷积神经网络 - 知乎 目录 1 设备device定义 2 训练模型定义 3 开始训练 3.1 step、batch…

4.机器学习-十大算法之一线性回归算法(LinearRegression)案例讲解

机器学习-十大算法之一线性回归算法案例讲解 一摘要二个人简介三什么是线性回归四LinearRegression使用方法五糖尿病数据线性回归预测1.数据说明2.导包3.导入数据4.脱敏处理5.抽取训练数据和预测数据6.创建模型7.预测8.线性回归评估指标9.研究每个特征和标记结果之间的关系.来分…

职场成功的关键:提升软实力,成就非凡事业

在竞争激烈的职场中&#xff0c;专业技能固然重要&#xff0c;但软实力同样不可或缺。要想在职场中脱颖而出&#xff0c;实现事业上的成功&#xff0c;我们需要在提升软实力上下功夫。本文将探讨职场软实力的内涵及其在职场成功中的作用&#xff0c;并提供一些建议&#xff0c;…

解决Quartus与modelsim联合仿真问题:# Error loading design解决,是tb文件中没加:`timescale 1ns/1ns

解决Quartus与modelsim联合仿真问题&#xff1a;# Error loading design解决&#xff0c;是tb文件中没加&#xff1a;timescale 1&#xff0c;一直走下来&#xff0c;在modelsim中出现了下面问题2&#xff0c;rtl文件、tb文件2.1&#xff0c;rtl代码2.2&#xff0c;tb测试2.3&a…

java Web实现用户登录功能

文章目录 一、纯JSP方式实现用户登录功能&#xff08;一&#xff09;实现思路1、创建Web项目2、创建登录页面3、创建登录处理页面4、创建登录成功页面5、创建登录失败页面6、编辑项目首页 &#xff08;三&#xff09;测试结果 二、JSPServlet方式实现用户登录功能&#xff08;一…

校园通勤车可视化系统的设计与实现

1.需求分析&#xff1a; 校园通勤车可视化系统的设计与实现&#xff0c;不用管什么可视化&#xff0c;就是一个小程序就是可以知道校园车的路线&#xff0c;然后往简单了弄就可以。 校园通勤车可视化系统的设计与实现&#xff0c;不用管什么可视化&#xff0c;就是一个小程序…