云原生(七)、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  Current
                                 Dload  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
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
EOF

sudo 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/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo 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/

#加入主节点
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_CIDR
    value: "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_TYPE
  value: "k8s,bgp"
- name: IP_AUTODETECTION_METHOD
  value: "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: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 31443
  selector:
    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: admin
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kubernetes-dashboard
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kubernetes-dashboard
  labels:
    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文件的书写)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ConcurrentHashMap线程安全机制

put源码&#xff1a; public V put(K key, V value) {return putVal(key, value, false); }/** Implementation for put and putIfAbsent */ final V putVal(K key, V value, boolean onlyIfAbsent) {if (key null || value null) throw new NullPointerException();int has…

python爬虫----了解爬虫(十一天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

Qt元对象系统

第二章Qt元对象系统 文章目录 第二章Qt元对象系统1.什么是元对象&#xff1f;2.元对象系统组成3.信号与槽信号和槽的本质绑定信号与槽自定义槽定义槽函数必须遵循一下规则槽函数的类型自定义槽案例 自定义信号自定义信号需要遵循以下规则信号和槽重载二义性问题 4.内存管理1. 简…

PFA(可溶性聚四氟乙烯)弯嘴洗瓶

PFA材质&#xff0c;又称可溶性聚四氟乙烯&#xff0c;是进口的高纯原材料&#xff0c;耐强酸强碱耐腐蚀和各种有机溶剂。 常用规格:30ml/60ml/100ml/250ml/500ml 产品特性 1、耐高低温&#xff1a;使用温度可达-200~260℃&#xff1b; 2、可打刻度&#xff0c;高度透明&#x…

20240330-0402-湖南长沙之旅-橘子洲,五一广场,国金广场,湖南博物馆

0330 复试&#xff0c;无语中&#xff0c;面试中文部分居然也是拉了坨大的 0331 晚上 感觉忙完复试&#xff0c;有种偶然感&#xff0c;跟自己设想的又不一样&#xff0c;感觉方向感真的差&#xff0c;压中得没多少。 刚忙完考试&#xff0c;去五一附近住&#xff0c;还是一…

wpf 自定义命令

自定义命令 MyCommand.cs public class MyCommand : ICommand {private readonly Action<Object> execAction;private readonly Func<Object,bool> changedFunc;public event EventHandler? CanExecuteChanged;public MyCommand(Action<object> execAction…

微信开发工具——进行网页授权

微信开发工具——进行网页授权 微信公众平台设置 1.在首页创建好自己的订阅号 网站&#xff1a;https://mp.weixin.qq.com/ 点击立即注册,在选择订阅号&#xff08;个人创建使用&#xff09; 之后按流程填写后&#xff0c;点击设置与开发-------->基本配置&#xff0c;这…

C++ //练习 11.4 扩展你的程序,忽略大小写和标点。例如,“example.“、“exmaple,“和”Example“应该递增相同的计数器。

C Primer&#xff08;第5版&#xff09; 练习 11.4 练习 11.4 扩展你的程序&#xff0c;忽略大小写和标点。例如&#xff0c;“example.”、"exmaple,"和”Example"应该递增相同的计数器。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工…

泰迪智能科技携手韶关学院共建实训基地

3月28日&#xff0c;韶关学院数学与统计学院院长宋杰、数学与统计学院副院长李少勇、数学与统计学院骨干教师邓四清、邝神芬、付林林莅临广东泰迪智能科技股份有限公司产教融合实训基地开展“韶关学院实习基地”揭牌仪式。泰迪智能科技高校事业部负责人施兴、培训业务部孙学镂、…

parallel linux虚拟机没有root权限

前言 今天刚在parallel上装上linux虚拟机&#xff0c;安装的是Debian发行版。用终端输入命令时&#xff0c;无意间发现当前用户竟然不是root用户&#xff0c;岂有此理&#xff01;众所周知&#xff0c;Linux系统一般安装之后都是默认root用户的&#xff0c;但是可能parallel先…

《系统架构设计师教程(第2版)》第8章-系统质量属性与架构评估-02-系统架构评估

文章目录 1. 一些重要概念1.1 敏感点 (Sensitivity Point)1.2 权衡点 (Tradeoff Point)1.3 风险承担者 (Stakeholders)1.3.1 系统生产者1.3.2 系统消费者1.3.3 系统服务人员1.3.4 其它人员 1.4 场景 (scenarios) 2. 系统架构评估方法2.1 基于场景的架构分析方法&#xff08;SAA…

【算法刷题day10】Leetcode:232.用栈实现队列、225. 用队列实现栈

文章目录 Leetcode 232.用栈实现队列解题思路代码总结 Leetcode 225. 用队列实现栈解题思路代码总结 stack、queue和deque对比 草稿图网站 java的Deque Leetcode 232.用栈实现队列 题目&#xff1a;232.用栈实现队列 解析&#xff1a;代码随想录解析 解题思路 一个栈负责进&a…

《编程菜鸟学 Python 数据分析》让工作自动化起来!

随着我国企业数字化和信息化的深入&#xff0c;企业对办公自动化的效率和灵活性要求越来越高。Python作为一种开源的软件应用开发方式&#xff0c;通过提供强大丰富的库文件包&#xff0c;极大地简化了应用开发过程&#xff0c;降低了技术门槛。Python开发有哪些优势、挑战以及…

【数据库】实践:博物馆藏品管理系统

目录 一、选题 二、需求分析 2.1数据库系统的业务描述 2.2主要逻辑业务 2.3 数据字典 2.4 数据流图&#xff1a; 2.5 模块介绍&#xff1a; 三、概念模型设计&#xff08;画局部E-R图&#xff0c;再合并画整体E-R图&#xff09; 四、逻辑结构设计——数据库关系模式 …

认知觉醒读书笔记之三重大脑(一)

引言 《认知觉醒》这本书太经典了&#xff0c;反复读了多次还是爱不释手&#xff0c;因此决定针对它写写读书笔记。今天主要针对这本书的三重大脑理论进行讲解 三重大脑 作者认为人类的大脑分为三重分别是本能脑、情绪脑以及理智脑&#xff0c;三者的区别如下图(从书中拷贝的…

多线程。

1. Thread创建的写法 1.继承Thread&#xff0c;重写run 2.实现Runnable&#xff0c;重写run 3.继承Thread&#xff0c;重写run&#xff0c;使用内部匿名类 4实现Runnable&#xff0c;重写run&#xff0c;使用内部匿名类 5使用lambda方法 Thread中的一些核心属性和方法 idn…

书生浦语全链条开源开放体系

开放了高质量语料数据 预训练 微调 评测 评测框架 部署 智能体 例如把openlab对于计算机视觉的封装

用python爬虫追踪知乎/B站大V排行

最近&#xff0c;我在学习和实践 python 的数据分析&#xff0c;前几周把知乎、B站、虎扑上的各种信息都抓了个遍&#xff0c;比如粉丝数、关注关系、发布时间、阅读量、回复数、标题关键字、地域分布……然后又对这些数据进行了整理&#xff0c;将数据通过各类图表进行可视化&…

【Python从入门到进阶】52、CrawlSpider链接提取器的使用

接上篇《51、电影天堂网站多页面下载实战》 上一篇我们采用Scrapy框架多页面下载的模式来实现电影天堂网站的电影标题及图片抓取。本篇我们来学习基于规则进行跟踪和自动爬取网页数据的“特殊爬虫”CrawlSpider。 一、什么是CrawlSpider&#xff1f; 1、CrawlSpider的概念 Cr…

动画效果-精灵图人物移动

效果&#xff1a;人物跑步移动 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…