K8s集群搭建教程

article/2025/7/12 1:10:31

学习并总结一下使用三台虚拟机搭建一个kubernetes集群的过程。

目录

  • 一、环境规划
  • 二、环境准备
    • 2.1 搭建流程概述:
    • 2.2 安装环境准备
      • 2.2.1 升级系统内核
      • 2.2.2 设置主机名和hosts本地解析
      • 2.2.3 关闭防火墙和SELinux
      • 2.2.4 时间同步
      • 2.2.5 关闭 swap 分区
      • 2.2.6 将桥接的IPv4流量传递到iptables链
      • 2.2.7 开启 ipvs
      • 2.2.8 重启机器
    • 2.3 容器化环境和组件安装
      • 2.3.1 Docker 安装
      • 2.3.2 设置Docker镜像加速器:
      • 2.3.3 添加阿里云的YUM软件源
      • 2.3.4 安装kubeadm、kubelet和kubectl
  • 三、kubernetes集群部署
    • 3.1 下载k8s所需镜像
    • 3.2 部署 Kubernetes 的 Master 节点
    • 3.3 部署 Kubernetes 的 Node节点
    • 3.4 部署网络插件
    • 3.5 设置 kube-proxy 的 ipvs 模式
    • 3.6 配置Node节点也能使用 kubectl 命令
    • 3.7 服务部署
    • 3.8 自动补全
    • 3.9 安装K8s-Dashboard
    • 3.10 登录dashboard
  • 四、参考资料
  • 五、拓展

一、环境规划

  • Kubernetes 集群大致分为两类:一主多从和多主多从。
    (1)一主多从(单 master ):一个 Master 节点,多台 Node 节点,搭建简单,但是有单机故障风险,适合用于测试环境。
    (2)多主多从(高可用):多台 Master 节点和多台 Node 节点,搭建麻烦但安全性高,适合用于生产环境。

  • kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包三种。简介如下:
    (1)minikube:一个用于快速搭建单节点的kubernetes工具。
    (2)kubeadm:一个用于快速搭建kubernetes集群的工具。
    (3)二进制包:从官网上下载每个组件的二进制包依次安装,此方式对于理解kubernetes组件更加有效。

1.集群类型:一主多从
2.安装方式:使用kubeadm工具快速搭建kubernetes集群。
3.主机规划:

角色IP地址实验环境
Master192.168.79.101Centos7.5 虚拟机
Node1192.168.79.102Centos7.5 虚拟机
Node2192.168.79.103Centos7.5 虚拟机

二、环境准备

2.1 搭建流程概述:

  1. 准备3台机器,要求网络互通(云服务器私网互通,虚拟机网络互通),同时可联网,因为要拉取镜像。
  2. 关闭防火墙、selinux、swap分区等,这些是可能会导致k8s集群出问题的地方,需要提前配置好。
  3. 安装Docker容器化环境,同时安装三个核心组件:kubeadm、kubelet、kubectl。
  4. 下载k8s所需镜像,创建一个Master节点,将Node节点加入到当前集群。
  5. 在k8s集群安装相关服务进行验证,登录k8s的WEB的用户界面dashboard。

2.2 安装环境准备

其实简单来说通过两条指令就能部署一个kubernetes集群:
1.创建一个master节点:kubeadm init
2.将node节点加入当前集群:kubeadm join <Master 节点的IP和端口>
在执行kubeadm init 指令后,kubeadm首先会做一系列检查工作,确保机器能够安装kubernetes:

  • linux系统内核的版本是否必须3.10以上?
  • linux cgroups模块是否可用?
  • 机器的hostname是否标准?
  • 安装的kubeadm和kubelet是否匹配?
  • docker是否已经安装?

因此建议把环境配置好再部署。

2.2.1 升级系统内核

K8S集群服务器内核必须一致,建议在每个节点(三台机器)上都升级系统内核到最新版本。

1.检查操作系统的版本(操作系统的版本至少在7.5以上)

#实验环境下机器的系统版本为7.9,内核版本为3.10.0
#查看系统版本
cat /etc/redhat-release
#查看当前系统的内核:
uname -sr

在这里插入图片描述
2.默认的 3.10.0版本较低,建议安装最新主线内核版本:

#在 CentOS 7.x 上启用 ELRepo 仓库:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm#查看可用的系统内核相关包:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available#安装最新主线内核版本:
yum -y --enablerepo=elrepo-kernel install kernel-ml

在这里插入图片描述
3.设置默认的内核版本:

#修改GRUB_DEFAULT=0,设置为0表示默认启动第一个操作系统或内核,从0开始计数
vi /etc/default/grubGRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=0 # 修改此处,原来是 saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

4.重新创建内核配置:

grub2-mkconfig -o /boot/grub2/grub.cfg#查看默认内核
grubby --default-kernel#若不是最新的,使用以下命令设置,reboot重启生效。
grubby --set-default $(ls /boot/vmlinuz-* | grep elrepo)

在这里插入图片描述

2.2.2 设置主机名和hosts本地解析

这一步的作用是方便识别,如主节点所在的虚拟机命名为k8s-master,从节点所在的虚拟机命名为k8s-node1、k8s-node2(重启或者新开窗口可验证)。

Linux 的 /etc/hosts 文件是配置ip地址及其对应主机名的文件,这里可以记录本机的或其他主机的ip及其对应主机名,方便后面集群节点间的直接调用,因此在每个节点(三台机器)上都配置一下主机名解析。

#根据集群规划,各节点设置对应的主机名
hostnamectl set-hostname k8s-master    #192.168.79.101
hostnamectl set-hostname k8s-node1     #192.168.79.102
hostnamectl set-hostname k8s-node2     #192.168.79.103vi /etc/hosts 
#所有节点编辑/etc/hosts文件,添加:
127.0.0.1   $(hostname)
192.168.79.101 k8s-master
192.168.79.102 k8s-node1
192.168.79.103 k8s-node2

在这里插入图片描述

2.2.3 关闭防火墙和SELinux

在每个节点(三台机器)上都关闭防火墙,并设置开机禁用。

在实际生产环境中,通常会采用防火墙和SELinux来增强系统的安全性,但在学习和测试环境中,这些安全措施可能会造成麻烦。因此,只用于学习环境建议关闭所有节点的防火墙和SELinux,以方便学习和测试。三台机器(所有节点)均需要在部署前配置好环境。

#关闭防火墙,关闭SELinux(设置为disabled)
systemctl stop firewalld && systemctl disable firewalld 
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config#确保防火墙和SElinux是关闭状态
systemctl status firewalld
getenforce#查看selinux:cat /etc/selinux/config
#1.永久关闭 SELinux ,需要重启机器生效:sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
说明:修改SELinux配置文件,将SELINUX=enforcing改为SELINUX=disabled,禁用SELinux安全模块。其中,sed是一个文本编辑器,-i选项表示直接修改原文件,#是分隔符,g表示全局替换。#2.临时关闭当前会话的 SELinux ,机器重启之后无效:setenforce 0
说明:将SELinux设置为Permissive模式,允许访问被拒绝的操作,但会记录到系统日志中。

在这里插入图片描述

2.2.4 时间同步

Kubernetes 要求集群中的节点时间必须精确一致,因此在每个节点(三台机器)上都添加时间同步。

#从指定的NTP服务器获取时间信息,并将本地系统时间设置为该服务器时间
yum install ntpdate -y
ntpdate time.windows.com#或者使用国内时间服务器:ntpdate ntp1.aliyun.com

在这里插入图片描述

2.2.5 关闭 swap 分区

当内存不足时,linux会自动使用swap,将部分内存数据存放到磁盘中。swap会导致docker的运行不正常,性能下降,还可能产生其他问题,因此部署k8s集群时一定要关闭swap分区。在每个节点(三台机器)上都进行以下操作:

#所有节点关闭swap交换分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a && sysctl -w vm.swappiness=0#查看是否关闭(swap 0 0 0则成功关闭)
free -m#临时关闭当前会话的 swap ,机器重启之后无效:
swapoff -a

在这里插入图片描述

2.2.6 将桥接的IPv4流量传递到iptables链

  • netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
  • 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
  • 在每个节点(三台机器)上都将桥接的IPv4流量传递到iptables的链:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
#加载br_netfilter模块
modprobe br_netfilter#查看是否加载
lsmod | grep br_netfilter#使生效
sysctl --system#拓展:持久化修改(保留配置包本地文件,重启系统或服务进程仍然有效)
sysctl -p

在这里插入图片描述

2.2.7 开启 ipvs

  • ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是4层LAN交换,作为Linux内核的一部分。ipvs运行在主机上,在真实服务器集群前充当负载均衡器。
  • k8s 默认情况下有三种网络负载均衡模式:userspace 代理模式、iptables代理模式、ipvs代理模式。这三种代理模式的负载能力是依次递增的。
  • 在 Kubernetes 中 service 有两种代理模型,一种是基于 iptables ,另一种是基于 ipvs 。ipvs 的性能要高于 iptables 的,但是如果要使用它,需要手动载入 ipvs 模块。
#在三台机器安装 ipset 和 ipvsadm :
yum -y install ipset ipvsadm#在三台机器执行如下脚本:
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF#授权、运行、检查是否加载:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

在这里插入图片描述

2.2.8 重启机器

此时三台机器都基本上完成了安装前准备,因为有些配置是重启后生效,因此建议在每个节点(三台机器)上都重启一下机器(reboot)。

2.3 容器化环境和组件安装

2.3.1 Docker 安装

  • 因为安装kubernetes需要docker容器化环境,因此先安装docker,但是注意kubernetes版本和docker的版本对应问题。按本博客的版本即可,如果是安装其他版本,需参考官方文档。
  • Kubernetes 和 Docker之间有版本的对应关系(如 Docker 版本v20.10对应 Kubernetes 的版本是 v1.21),版本对应不上可能会提示docker版本不兼容,可参考Kubernetes各版本对应支持的docker版本列表。
  • 在每个节点(3台机器)上都安装docker
#卸载旧版本docker(如有)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine# yum安装 gcc 相关软件,安装yum工具包
yum -y install gcc gcc-c++
yum -y install yum-utils#设置阿里云的stable 镜像仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#更新 yum 软件包索引
yum makecache fast#安装指定版本的 Docker(v20.10.8:
yum -y install docker-ce-3:20.10.8-3.el7.x86_64 docker-ce-cli-1:20.10.8-3.el7.x86_64 containerd.io#启动docker并设置开机自启
systemctl start docker
systemctl enable docker#验证 Docker 是否安装成功:
systemctl status docker
docker -v

在这里插入图片描述

2.3.2 设置Docker镜像加速器:

为了下载各组件时从国内镜像源下载,在每个节点(3台机器)上都需要配置镜像加速器。

mkdir -p /etc/docker#配置阿里云镜像加速:
tee /etc/docker/daemon.json <<-'EOF'
{"exec-opts": ["native.cgroupdriver=systemd"],	"registry-mirrors": ["https://du3ia00u.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://registry.docker-cn.com"],"live-restore": true,"log-driver":"json-file","log-opts": {"max-size":"500m", "max-file":"3"},"max-concurrent-downloads": 10,"max-concurrent-uploads": 5,"storage-driver": "overlay2"
}
EOF#使之生效并重启docker
systemctl daemon-reload
systemctl restart docker

在这里插入图片描述

2.3.3 添加阿里云的YUM软件源

由于kubernetes的镜像源在国外,下载软件包较慢或者下载失败,这里在每个节点(3台机器)上都切换成国内的阿里云镜像源。

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

在这里插入图片描述

#清除缓存并更新软件包列表
yum clean all
yum makecache
yum list

2.3.4 安装kubeadm、kubelet和kubectl

在每个节点(3台机器)上都需要安装kubeadm、kubelet和kubectl,安装时指定版本为1.21.10。

  • kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。
  • Kubelet:运行在cluster(集群)所有节点上,负责启动POD和容器。
  • kubectl是Kubernetes集群的命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件。

1.安装三大组件:

yum install -y kubelet-1.21.10 kubeadm-1.21.10 kubectl-1.21.10#查看安装版本:
kubelet --version

2.为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,修改"/etc/sysconfig/kubelet"文件为以下内容:

vi /etc/sysconfig/kubelet# 修改为
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

3.设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动:

systemctl enable kubelet

在这里插入图片描述

三、kubernetes集群部署

3.1 下载k8s所需镜像

在每个节点(3台机器)上都安装好k8s集群所需的镜像。

1.查看 Kubernetes 安装所需镜像

kubeadm config images list

2.下载 Kubernetes 安装所需镜像

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0

3.查看镜像下载情况

docker images

在这里插入图片描述

3.2 部署 Kubernetes 的 Master 节点

1.在 192.168.79.101 机器上部署 Kubernetes 的 Master 节点:

kubeadm init \--apiserver-advertise-address=192.168.79.101 \--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \--kubernetes-version=v1.21.10 \--service-cidr=10.96.0.0/16 \--pod-network-cidr=10.244.0.0/16

说明:

  • apiserver-advertise-address =Master节点的 IP 地址。
  • image-repository=容器镜像的仓库地址。
  • kubernetes-version= 安装的kubernetes版本号。
  • service-cidr 和 apiserver-advertise-address 、pod-network-cidr 不能在同一个网络范围内。
  • 不要使用 172.17.0.1/16 网段范围,因为这是 Docker 默认使用的。

在这里插入图片描述
2.拷贝kubectl使用的连接k8s认证文件到默认路径,根据日志提示,想要开始使用集群,需要在 master节点机器上(192.168.79.101 )执行如下命令:

#创建目录存放 Kubernetes 的配置文件并配置 Kubernetes 客户端工具 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config#将 $HOME/.kube/config 文件的权限修改为当前用户
chown $(id -u):$(id -g) $HOME/.kube/config# 如果是 root 用户,可以执行如下命令,在使用 kubectl 命令时就不需要每次都指定配置文件的路径
export KUBECONFIG=/etc/kubernetes/admin.conf

在这里插入图片描述
3.默认的 token 有效期为 2 小时,当过期之后,该 token 就不能用了,另外也可以生成一个永不过期的token,命令如下 :

#生成token,有效期2小时
kubeadm token create --print-join-command# 生成一个永不过期的token
kubeadm token create --ttl 0 --print-join-command#此时系统自动生成了一个kubeadm join命令,这个命令是用来将一个新的节点加入到 Kubernetes 集群中的。说明:
kubeadm join 192.168.79.101:6443    ----集群的 API Server 地址--token y1aqpl.ktwweub0h338qh46   ----用来认证新节点的凭证--discovery-token-ca-cert-hash sha256:dca999e4b0fdd14b7e92a6ed3cd1fbfedad273ba409e0bc5a76ebc947bd1f3b2

在这里插入图片描述

3.3 部署 Kubernetes 的 Node节点

通过上面自动生成的kubeadm join命令,将两个node节点加入到kubernetes集群中

在这里插入图片描述

此时集群已经有了一个节点(master)了,此时是NotReady状态。同样的在192.168.79.102 和 192.168.79.103两台机器上都执行生成的命令把这两个工作节点加入到当前集群:

kubeadm join 192.168.79.101:6443 \--token y1aqpl.ktwweub0h338qh46 \--discovery-token-ca-cert-hash \sha256:dca999e4b0fdd14b7e92a6ed3cd1fbfedad273ba409e0bc5a76ebc947bd1f3b2 

在这里插入图片描述

3.4 部署网络插件

Kubernetes本身并没有自己实现容器网络,而是借助CNI标准,通过插件化的方式来集成各种网络插件,实现集群内部网络相互通信。

Kubernetes集群设计了Cluster IP、Node IP、Pod IP三种类型的通信IP:

  • (1)Cluster IP是Service对象的IP地址,实现Pod服务的负载均衡,外部网络无法ping通,只在集群内部可以访问使用,是一个虚拟的IP。
  • (2)Node IP是集群节点Node的IP地址,可以是物理机的IP(也可能是虚拟机IP)。
  • (3)Pod IP是容器组Pod的IP地址,是在容器组初始化过程由Pause容器申请的IP地址。其中Pod IP是容器网络接口CNI与具体的网络插件来实现IP的申请及数据包的转发。

1.Kubernetes 支持多种网络插件,比如 flannel、calico、canal 等,任选一种安装即可,这里选择 calico。在 master节点(192.168.79.101 )上执行:

kubectl apply -f https://projectcalico.docs.tigera.io/v3.19/manifests/calico.yaml

在这里插入图片描述
2.查看部署 CNI 网络插件进度:

kubectl get pods -n kube-system
#或者
watch kubectl get pods -n kube-system

在这里插入图片描述

3.在Master节点使用kubectl工具查看节点状态,此时节点状态应该都是Ready,pod全部running。

kubectl get nodes

在这里插入图片描述

到这里一个一主两从的k8s集群已经搭建好了。

3.5 设置 kube-proxy 的 ipvs 模式

1.在 Master节点(192.168.65.101)上设置 kube-proxy 的 ipvs 模式:

kubectl edit cm kube-proxy -n kube-system

找到ipvs模块,将 mode: " " 双引号里面加上ipvs。

在这里插入图片描述

2.删除 kube-proxy ,让 Kubernetes 集群自动创建新的 kube-proxy :

kubectl delete pod -l k8s-app=kube-proxy -n kube-system

在这里插入图片描述

3.6 配置Node节点也能使用 kubectl 命令

默认情况下,只有 Master 节点才有 kubectl 命令,但是有些时候我们也希望在 Node 节点上执行 kubectl 命令。

1.在两个node节点(192.168.79.102 和 192.168.79.103)上都创建config文件,执行命令:

mkdir -pv ~/.kube
touch ~/.kube/config

在这里插入图片描述
2.在node节点已经创建好了config文件,接下来将master节点的admin.conf文件远程拷贝复制到需要安装的机器(注意你配置的机器名是什么?如root@k8s-node1)。在master节点(192.168.79.101)上执行:

scp /etc/kubernetes/admin.conf root@k8s-node1:~/.kube/config
scp /etc/kubernetes/admin.conf root@k8s-node2:~/.kube/config

在这里插入图片描述
3.此时在两个node节点验证,已经可以使用kubectl命令了:
在这里插入图片描述

拓展:scp命令的应用

  • 机器名一般为root@localhost,把localhost换成机器IP
  • 复制的是目录的话就要加-r参数
  • 复制过程输入yes同意,再输入对应机器密码即可
1.把远程的文件复制到本地
scp 远程机器名:要复制文件的地址 复制到本地的文件地址
例:scp root@192.168.79.100:/val/test/test.tar.gz /val/test/test.tar.gz2.把本地的文件复制到远程主机上
scp 要复制文件的地址 远程机器名:复制到该机器的文件的地址
例:scp /val/test.tar.gz root@192.168.79.100:/val/test.tar.gz3.把远程的目录复制到本地
例:scp -r root@192.168.79.100:/val/test/ /val/test/4.把本地的目录复制到远程主机上
例:scp -r /val/ root@192.168.79.100:/val/5.当同时有多个服务器的文件要复制到本地目录:
例:scp root@192.168.79.1:/var/cp1.tar.gz root@192.168.79.2:/var/cp2.tar.gz /var/tmp/
最后面的一个必需是目录,前面的必须是文件,才能成功批量复制,复制中会提示多次输入密码。

3.7 服务部署

kubernetes集群已经部署完毕,接下来可以部署服务使用了。

在Kubernetes集群中部署nginx1.14,测试下集群是否正常工作。
1.部署Nginx:

kubectl create deployment nginx --image=nginx:1.14-alpine

2.暴露端口:

kubectl expose deployment nginx --port=80 --type=NodePort

3.查看服务状态:

kubectl get pods,svc

在这里插入图片描述

3.8 自动补全

启动 kubectl 自动补全功能,参考kubernetes官网:Linux 系统中的 Bash 自动补全功能

# 安装bash
yum -y install bash-completion
# 自动补全 
echo 'source <(kubectl completion bash)' >>~/.bashrc 
kubectl completion bash >/etc/bash_completion.d/kubectl
# 全局
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
source /usr/share/bash-completion/bash_completion

在这里插入图片描述

3.9 安装K8s-Dashboard

Dashboard 是基于网页的 Kubernetes 用户界面。可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。我们可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment,Job,DaemonSet 等等)。常用的如对Deployment实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用,展示Kubernetes集群中的资源状态信息和所有报错信息等。
参考资料:安装Kubernetes Dashboard

1.使用 wget 命令将dashboard(这里版本为2.0.4)下载到Master 节点上:

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

在这里插入图片描述
2.构建 Pod:

kubectl apply -f recommended.yaml

3.查看 Pod 状态,等待一段时间,已经处于running状态。

kubectl get pods --all-namespaces | grep dashboard

在这里插入图片描述
4.删除现有的 dashboard 服务

dashboard 服务的 namespace 是 kubernetes-dashboard,但是该服务的类型是ClusterIP,不便于我们通过浏览器访问,因此需要在后面配置 NodePort 类型的,使之在集群外部能否访问。

#查看所有命名空间namespace
kubectl get svc --all-namespaces#删除现有dashboard服务
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard

在这里插入图片描述

3.10 登录dashboard

  • 配置文件放在:/etc/Kubernetes
  • k8s所有证书的存放位置:/etc/kubernetes/pki
  • 环境变量(env)存放的位置:/var/lib/kubelet/kubeadm-flags.env
  • kubelet配置文件存放位置:/var/lib/kubelet/config.yaml

1.创建一个nodePort类型的kubernetes-dashboard。进入/etc/kubernetes 目录下创建配置文件dashboard-svc.yaml:

cd /etc/kubernetes
vi /etc/kubernetes/dashboard-svc.yaml

dashboard-svc.yaml文件内容如下:

kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:type: NodePortports:- port: 443targetPort: 8443selector:k8s-app: kubernetes-dashboard

2.创建kubernetes-dashboard的 Service服务:

kubectl apply -f dashboard-svc.yaml

在这里插入图片描述
此时再次查看namespace,已经有nodePort类型的kubernetes-dashboard,注意443:32031,即外部访问端口为32031。

kubectl get svc --all-namespaces

在这里插入图片描述
3.创建 kubernetes-dashboard 管理员角色,在/etc/kubernetes 目录下创建配置文件dashboard-svc-account.yaml,其内容如下:

apiVersion: v1
kind: ServiceAccount
metadata:name: dashboard-adminnamespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: dashboard-admin
subjects:- kind: ServiceAccountname: dashboard-adminnamespace: kube-system
roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.io

4.同样的执行创建,使该yaml文件生效:

kubectl apply -f dashboard-svc-account.yaml

在这里插入图片描述
5.获取 token,先查找token文件:

kubectl get secret -n kube-system |grep admin|awk '{print $1}'#系统返回dashboard-admin-token-bvhwm,查看token
kubectl describe secret dashboard-admin-token-bvhwm -n kube-system|grep '^token'|awk '{print $2}'

在这里插入图片描述
此时我们得到了dashboard的token,先复制保存一份:

eyJhbGciOiJSUzI1NiIsImtpZCI6IkFEaEJBYkY1YXAzS3ZTVGZzdFY4aXJ5NWRmU1VIN2FzMDlVQ1U2WndvZGcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tYnZod20iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VuzZXJ2aWNlLWFjY291bnQudWlkIjoiYzExNmZjMWUtYmI4My00MTM5LWI4Yz2hib2FyZC1hZG1pbiJ9.fkhA8aXAidNBIvytgfAIK3v5-8cibO0Ub4dsUTzF1BymraFOA-MZmnEn6yIUuhouh5jOcAzCOGlwrbxwjWM44azAm4YLk6E8WtgM4AoDbJDXY2UqrPP2xYdkLiPwqXSB6gVR5wxMMbkH3AIpmn5yilL7ocb0-N9m4Gdsu1ummIi7a5cdH4vtqCG_qO-qtlXwG_UGDbq6QOsVMJ4VxsmlOk3uPa746gG51BFZhaIm9b1Z9JhimJjPvbe_Gy7rgY9V1CieOJmDoev0IbjdDm58yDOSgsPVfJoBzRheo08N6bky0Kt0lMDOBSupw

6.查看外部访问端口,也就是之前我们创建的 Service:

kubectl get svc --all-namespaces | grep dashboard

在这里插入图片描述
7.在浏览器访问dashboard,网址输入【集群IP:端口号】如:https://192.168.79.102:32031/可以访问web管理界面。出现以下界面时继续访问地址即可。
在这里插入图片描述
输入之前生成的token登录dashboard:
在这里插入图片描述
此时已经成功进入,可以通过dashboard管理kubernetes集群资源了:
在这里插入图片描述

四、参考资料

1.kubernetes官网
2.k8s集群环境的搭建
3.Kubernetes(v1.21)安装

五、拓展

kubernetes知识学习
k8s常用命令

#部署yaml文件:
kubectl apply -f xxx.yaml#获取节点和服务版本信息,并查看附加信息
kubectl get nodes -o wide#获取pod信息,默认是default名称空间
kubectl get pod#获取pod信息,默认是default名称空间,并查看附加信息
#kubectl get pod -o wide#获取指定名称空间的pod
kubectl get pod -n kube-system#获取指定名称空间中的指定pod
kubectl get pod -n kube-system podName#获取所有名称空间的pod
kubectl get pod -A#查看所有名称空间的service信息
kubectl get svc -A#查看componentstatuses信息
kubectl get cs#查看所有deployments信息
kubectl get deploy -A#查看所有replicasets信息
kubectl get rs -A#查看所有statefulsets信息
kubectl get sts -A#查看所有jobs信息
kubectl get jobs -A

http://chatgpt.dhexx.cn/article/57Nk6HNv.shtml

相关文章

k8s教程(Volume篇)-总结

文章目录 01 引言02 内容整理2.1 概念2.2 PV2.3 PVC2.4 StorageClass2.5 CSI 03 文末 01 引言 至此&#xff0c;volume的相关知识已经讲解完了&#xff0c;下面是相关文章的详情总结&#xff1a; 《k8s教程&#xff08;Volume篇&#xff09;-k8s存储机制概述》《k8s教程&…

【K8S教程分享】Kubernetes K8S高级视频教程

Kubernetes K8S高级视频教程&#xff0c;目前的云计算(PaaS),事实上已经以K8S为标准建立平台&#xff0c;各大开源项目也都依据K8S对接进行开发或二次开发&#xff0c;所以K8S是目前云计算领域的必备技能&#xff0c;当能结合openstackk8s双平台者的运维、开发、使用者&#xf…

k8s教程(基础篇)-安装与配置概述

文章目录 01 系统要求02 安装概述03 私有镜像库配置与升级3.1 私有镜像库配置3.2 升级 04 CRI&#xff08;容器运行时接口&#xff09;详解 4.1 CRI 概述 4.2 CRI 的主要组件 4.3 Pod 和容器的生命周期管理 4.4 面向容器级别的设计思路 4.5 尝试使用新的 Docker-CRI 来创建容器…

K8S入门教程

目录 1.Kubernetes概述 1.1 Kubernetes介绍 1.2 基本架构与常用术语 2.Kubernetes集群 2.1 环境准备与规划 2.2 Master安装 2.3 Node1安装 2.4 Node2安装 2.5 健康检查与示例测试 1.Kubernetes概述 1.1 Kubernetes介绍 1.1.1 Kubernetes是什么及作用 Kubernetes(K8S)是Google在…

k8s教程(基础篇)-入门及案例

文章目录 1. 了解 Kubernetes 1.1 Kubernetes是什么 1.2 Kubernetes的基本知识 1.2.1 Service 1.2.2 Pod 2. 为什么要用 Kubernetes 3. 从一个简单的例子开始 3.1 启动 MySQL 服务 3.1.1 Deployment定义文件 3.1.2 service定义文件 3.2 启动 Tomcat应用 3.2.1 Deployment定义文…

k8s搭建(超详细,保姆级教程)

1、简介 这里就不赘述&#xff0c;想要了解的朋友直接去这里深入了解什么是K8S。 2、环境要求 2台以上机器&#xff0c;操作系统 CentOS7.7-64位系统硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU&#xff0c;硬盘30GB或更多集群中所有机器之间网络互通可以…

k8s教程----零基础快速入门

k8s详解教程----零基础快速入门 前言&#xff1a; Kubernetes&#xff08;k8s&#xff09;作为云原生的核心平台&#xff0c;吸引了越来越多的运维、开发、测试以及其他技术员去了解学习。随着行业越来越内卷&#xff0c;k8s已经被广泛使用&#xff0c;作为一名运维人员&#…

K8S使用教程(详细)

Kubernetes详细教程 1. Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点…

零基础学kubernetes(k8s)必看教程,带你10分钟快速实战入门k8s

一、前言 作为一个工作十余年&#xff0c;拥有比较丰富的计算机网络运维、主机运维、云计算平台运维、自动化运维开发经验的老鸟&#xff0c;我来说说我当初刚接触Kubernetes时的一些感受以及学习技巧。 刚开始学习k8s时&#xff0c;我觉得挺难的&#xff0c;一头雾水&#x…

python input函数换行_python input函数换行_python_input函数

Python raw_input() 函数 Python内置函数 python raw_input()用来获取控制台的输入。 raw_input()将所有输入作为字符串看待,返回字符串类型。注意:input()和 raw_input()这两个函 Python input和print函数 - 箬笠蓑衣 258x256 - 5KB - PNG python row函数_row函数_python row_…

Python基础之input函数和eval函数

Python基础之&#xff08;二&#xff09; 一、 input()函数-数据输入 input()函数的功能&#xff1a;显示用户输入的值 input()函数可以包含一些提示性文字 通过使用input()函数&#xff0c;可以使用户主动输入的内容变成程序中的字符串变量的值 <字符串变量> input(&l…

函数input()讲解

目录 上次我们讲解了函数print&#xff0c;今天我们来讲它的“好兄弟”input&#xff01; 讲解 1.input与变量 2.input与提示语 3.input与print 例子 上次我们讲解了函数print&#xff0c;今天我们来讲它的“好兄弟”input&#xff01; 讲解 1.input与变量 input在pyth…

Python input函数

input()函数 import timeprint(亲爱的同学&#xff1a;) time.sleep(1)print(我们愉快地通知您&#xff0c;您已获准在霍格沃茨魔法学校就读。) time.sleep(2)print(随信附上所需书籍及装备一览。) time.sleep(1)print(学期定于九月一日开始。) time.sleep(1)print(鉴于您对魔…

python中input函数最简单详细的了解

一、input&#xff08;&#xff09;函数 有了 输入 魔法&#xff0c;程序就有了对话的功能。计算机根据你的回答进行对应的处理&#xff0c;好像能听懂你的话一样。 你通过 Python 代码向计算机提供指令&#xff0c;计算机执行指令&#xff0c;然后通过 input() 函数把问题显…

input函数和int函数的使用

第一&#xff0c;input函数接受一个标准输入数据&#xff0c;返回str类型 第二&#xff0c;int函数可以把str强制转换为整形 第三&#xff0c;int(input()) ps&#xff1a;最近搞深度学习的视频&#xff0c;但是依然需要实操

python中input函数的使用

input() 函数接受一个标准输入数据&#xff0c;返回为 string 类型。 input() # 单个输入使用input ninput() print(n) print(type(n))ninput("输入&#xff1a;") print(n) print(type(n))ninput() print(n) print(type(n))input().split() split()方法通过指定分…

python编程 input输入函数

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.输入与输出 1.input输入函数 2注意点① 3注意点② 二.input输入函…

Python中的input()函数

选择题 请问在Python 3.x中&#xff0c;从键盘输入数字2之后&#xff0c;下列代码的输出结果是&#xff1f; a input("请输入年龄&#xff1a;") print(a 1) A a 1 B 2 1 C 3 D 抛出异常 问题解析 1.在Python中&#xff0c;使用内置函数input()可以接收用户的键盘…

Python基础 input函数

输入函数input&#xff08;&#xff09; 作用&#xff1a;接收来自用户的输入 返回值类型&#xff1a;输入值的类型为str 值的存储&#xff1a;使用 对输入的值进行存储 input函数的基本使用 present input (你想要什么礼物呢&#xff1f;) present --> 变量 --> …

php中input函数,input函数的用法是什么?

input函数的用法是什么? input函数的用法是: 1.input()函数 在Python3中,input()函数接受一个标准输入数据,返回为string类型。 注意:在Python3中,raw_input()和input()进行了整合,去除了raw_input(),仅保留了input()函数,其接收任意任性输入。将所有输入默认为字符串处…