Centos 9 安装 k8s

为了尽可能契合生产环境的部署情况,这里用kubeadm安装集群,同时方便跟随笔记一步步实践的过程,也更加了解k8s的一些特性和基础知识。

先决条件

这里将通过虚拟机安装3台centos stream 9服务器,并组成kubeneters集群(1个master,2个worker节点),以下是本次实践的基本环境信息:

  • VMware Workstation Pro 版本:17.0.1 build-21139696
  • 操作系统:centos stream 9,下载 CentOS-Stream-9-latest-x86_64-dvd1.iso
  • k8s版本:v1.26.1
  • k8s网络插件:flannel
  • k8s存储插件:nfs

一、在虚拟机(VMware Workstation Pro)上安装操作系统

在虚拟机中按安装3台服务器(内存2G,处理器数量1,处理器内核数量2,网络桥接模式):

  • 10.20.33.11 k8s-master
  • 10.20.33.12 k8s-node01
  • 10.20.33.13 k8s-node02

简要步骤如下:

1、创建新的虚拟机

2、选择典型

3、安装程序光盘映像文件-选择下载好的centos stream 9 文件

4、输入个性化的Linux信息(后面步骤中如果选择精简安装,这里输入信息则无用,这里的信息主要用于桌面版的账户登录)

5、输入虚拟机名称,并选择虚拟的文件存放位置(这里建议不要放到C盘)

6、指定磁盘容量50G,选择【将虚拟磁盘拆分成多个文件】

7、自定义硬件:内存2G,处理器数量1,处理器内核数量2,网络桥接模式(不勾选复制物理网络连接状态)

其他都默认即可,点击完成即自动装centos stream 9的引导程序,等待几分钟出现界面配置信息(选择语言)

8、选择中文(简体中文)

9、配置安装目的地-->存储配置默认选择自动即可

10、软件选择-->基本环境-->Minimal Install,这里选择最小安装不需要桌面,需要桌面版的则默认Server with GUI即可

11、网络和主机名-->配置主机名k8s-master(按照上面的规划ip即名称配置)-->配置-->IPv4 设置-->手动(参考你的主机配置地址、DNS),我这里配置如下:

12、ROOT密码-->输入密码-->取消锁定root账户,允许root用户使用密码进行SSH登录--完成后,点击开始安装,等待10分钟左右系统安装完成启动系统

13、启动后,用xshell(或其他连接工具)连接,安装一些基础工具:

复制代码
$ yum install -y wget vim net-tools telnet

3个节点重复以上步骤安装完成即可!

二、安装k8s前的系统配置准备

在安装k8s前,通过官方文档了解到有一些服务器的配置工作,来保证k8s能顺利创建和工作。

在每个节点上进行如下操作:
1、关闭防火墙

复制代码
#临时关闭
$ systemctl stop firewalld
#永久关闭
$ systemctl disable firewalld

2、关闭selinux

复制代码
#永久关闭
$ sed -i '/selinux/s/enforcing/disabled/' /etc/selinux/config
#临时关闭
$ setenforce 0

3、关闭swap

复制代码
#临时关闭
$ swapoff -a
#永久关闭
$ sed -ri 's/.*swap.*/#&/' /etc/fstab

4、将桥接的 IPv4 流量传递到 iptables 的链(所有节点都设置)

复制代码
#启用必要的模块
$ sudo modprobe overlay
$ sudo modprobe br_netfilter

$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

#配置生效
$ sudo sysctl --system

5、安装containerd

k8s依赖容器运行时(v1.24 弃用 dockershim)(如果需要使用docker,需要安装cri-dockerd组件),我们这里直接使用containerd。

复制代码
$ sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

$ sudo dnf update
$ sudo dnf install -y containerd

$ sudo mkdir -p /etc/containerd
$ sudo containerd config default | sudo tee /etc/containerd/config.toml

# 修改containerd配置
$ sudo vi /etc/containerd/config.toml
# 1、找到[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]并将值更改SystemdCgroup为true
# 2、找到sandbox_image = "k8s.gcr.io/pause:3.6"并改为sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"

# 重启以应用更改
$ sudo systemctl restart containerd
# 加入开机启动
$ sudo systemctl enable containerd

4、在 /etc/hosts 配置主机名与IP地址映射,避免将来IP变更导致k8s集群需要做大量工作适配

复制代码
10.20.33.11 k8s-master
10.20.33.12 k8s-node01
10.20.33.13 k8s-node02

以上完成后我们的服务器就准备就绪了。

三、安装k8s集群及网络插件(flannel)

以下步骤没有显示说明在指定节点上执行的步骤,则在所有节点上执行。
1、添加kubernetes仓库

复制代码
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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

2、安装Kubernetes modules

复制代码
# 当前最新版本v1.26.1
$ sudo dnf update
$ sudo dnf install -y kubelet kubeadm kubectl
# 加入开机启动
$ sudo systemctl enable kubelet

3、部署kubernetes集群

bash 复制代码
error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node: nodes "k8s-master" not found
bash 复制代码
swapoff -a
kubeadm reset
systemctl daemon-reload
systemctl restart kubelet
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

(1)、在k8s-master节点上初始化集群

复制代码
# pod-network-cidr填写地址与后面安装的flannel插件默认的网段保持一致
$ kubeadm init \
  --apiserver-advertise-address=10.20.33.11 \
  --image-repository registry.aliyuncs.com/google_containers \
  --pod-network-cidr=10.244.0.0/16 \
  --control-plane-endpoint=k8s-master
# 等待一会,成功初始化后,输出内容如下:
-------------------------------------
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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s-master:6443 --token uh9zuw.gy0m40a90sd4o3kl \
        --discovery-token-ca-cert-hash sha256:24490dd585768bc80eb9943432d6beadb3df40c9865e9cff03659943b57585b2
-------------------------------------

kubeadm join从输出的末尾复制命令并将其保存在安全的地方。稍后我们将使用此命令来允许工作节点加入集群。如果您忘记复制该命令,或者找不到它,您可以使用以下命令重新生成它:

复制代码
$ sudo kubeadm token create --print-join-command

接下来按照输出提示创建和声明目录

复制代码
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

(2)、将pod网络部署到集群

遇到网络连接问题,需要把kube-flannel.yml下载,然后copy到该linux机器上

复制代码
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
-------------------------------------
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
-------------------------------------

验证主节点现在是否准备就绪:

复制代码
$ sudo kubectl get nodes
-------------------------------------
NAME          STATUS   ROLES             AGE   VERSION
k8s-master   Ready    control-plane     2m50s v1.26.1
-------------------------------------

建议检查所有 Pod 是否正常运行:

复制代码
$ kubectl get pods --all-namespaces
-------------------------------------
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-64897985d-5r6zx 0/1 Running 0 22m
kube-system coredns-64897985d-zplbs 0/1 Running 0 22m
kube-system etcd-master-node 1/1 Running 0 22m
kube-system kube-apiserver-master-node 1/1 Running 0 22m
kube-system kube-controller-manager-master-node 1/1 Running 0 22m
kube-system kube-flannel-ds-brncs 0/1 Running 0 22m
kube-system kube-flannel-ds-vwjgc 0/1 Running 0 22m
kube-system kube-proxy-bvstw 1/1 Running 0 22m
kube-system kube-proxy-dnzmw 1/1 Running 0 20m
kube-system kube-scheduler-master-node 1/1 Running 0 22m
-------------------------------------

(3)、在子节点(k8s-node01、k8s-node02)按照上面的提示添加工作节点

运行第(1)步kubeadm join的命令,将节点加入集群:

复制代码
$ kubeadm join k8s-master:6443 --token uh9zuw.gy0m40a90sd4o3kl \
        --discovery-token-ca-cert-hash sha256:24490dd585768bc80eb9943432d6beadb3df40c9865e9cff03659943b57585b2
-------------------------------------
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.
-------------------------------------

两个节点加入完成后,在k8s-master节点上验证:

复制代码
$ kubectl get nodes
-------------------------------------
NAME          STATUS   ROLES             AGE   VERSION
k8s-master   Ready    control-plane     2m50s v1.26.1
k8s-node01   Ready                     83s    v1.26.1
k8s-node02   Ready                     93s    v1.26.1
-------------------------------------

将子节点设置为worker角色:

复制代码
$ kubectl label node k8s-node01 node-role.kubernetes.io/worker=worker

完成后,再次查看节点,可以看到ROLES变为了worker,至此,我们的集群就准备就绪了。

(4)、如果需要在子节点访问kubernetes集群

复制代码
# 在子节点创建文件夹
$ mkdir -p ~/.kube
# 在主节点执行如下命令
$ scp $HOME/.kube/config root@k8s-node01:~/.kube/config
$ scp $HOME/.kube/config root@k8s-node02:~/.kube/config
# 在子节点进行验证
$ kubectl get nodes
-------------------------------------
NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   6d23h   v1.26.1
k8s-node01   Ready    worker          6d23h   v1.26.1
k8s-node02   Ready    worker          6d23h   v1.26.1
-------------------------------------

四、安装Dashboard

dashboard提供界面化查看kubernetes集群相关资源使用情况,且可在线化编辑和操作资源。
1、安装Dashboard服务,下载dashborad.yaml(当前版本:v2.7.0)

复制代码
$ wget https://raw.githubusercontent.com/cby-chen/Kubernetes/main/yaml/dashboard.yaml

# 修改dashboard.yaml,暴露端口
$ vim dashboard.yaml
-------------------------------------
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  type: NodePort
  selector:
    k8s-app: kubernetes-dashboard
-------------------------------------
$ kubectl apply -f dashboard.yaml

2、创建用户:

复制代码
$ wget https://raw.githubusercontent.com/cby-chen/Kubernetes/main/yaml/dashboard-user.yaml
$ kubectl apply -f dashboard-user.yaml

3、创建登录Token:

复制代码
$ kubectl -n kubernetes-dashboard create token admin-user
-------------------------------------
eyJhbGciOiJSUzI1NiIsImtpZCI6IkQ1aFlySU9EYzBORlFiZkxLUU5KN0hFRlJZMXNjcUtSeUZoVHFnMW1UU00ifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjc2NjI0ODM3LCJpYXQiOjE2NzY2MjEyMzcsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiZjk0MjU5MGItZjgzNC00ZDVkLTlhZGItNmI0NzY0MjAyNmUzIn19LCJuYmYiOjE2NzY2MjEyMzcsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.eWxD-pVzY9S-QcS4r-YpY7MAzZMg0jgP_Dj0i64aH8z2_NU25IJuNYHWB-3A7H6oEMEAofSbIYui-uE8a2oroLylwSPPP_IjcKmGZ2AUiFOfSD_R2QXzl2AC5-BsXBK068KzSYBfieesB-oWQjS8hKd4AOHjLKWWZlp9gJd_qdc8BbQWrKlKpmdmczQvXpeufj371W_taJIH_xxogmUVMgJOVxwawNsD5YGt0O7-_Y70s8AL9DQs3fAAU4YXGG8TmOI3yvOQCqNgfZuiVg2uE5dc4SGzk_FfBOf3QNCpcL1tvjKe6mH5GWlCNEYbJ4eu9flny9a4iRR2gGpt30AA5Q
-------------------------------------

打开地址:https://10.20.33.11:30001/,输入输出的Token,即可完成登录。

五、安装存储插件(nfs)并测试

未来部署很多应用(mysql、mongodb、minio...)都会用到存储,kubernetes集群常见的存储插件有NFS、Ceph、GlusterFS、iSCSI 等,这里选用NFS。
1、安装NFS服务器

(1)、在k8s-master节点上安装nfs服务作为存储服务器

复制代码
$ sudo dnf install -y nfs-utils
$ sudo mkdir -p /var/nfs/data
$ sudo chown nobody:nobody /var/nfs/data
$ sudo chmod 755 /var/nfs/data
# 启动nfs服务
$ sudo systemctl start nfs-server
# 加入开机启动
$ sudo systemctl enable nfs-server

(2)、配置NFS共享

复制代码
$ sudo vim /etc/exports
-------------------------------------
/var/nfs/data *(rw,sync,no_root_squash,no_all_squash)
-------------------------------------
# 应用更改:
$ sudo exportfs -rav

2、在子节点(k8s-node01、k8s-node02)安装nfs作为客户端访问nfs服务,并测试

安装 NFS 软件包:

复制代码
$ sudo dnf install nfs-utils

挂载NFS共享目录:

复制代码
$ sudo mkdir -p /nfs/data
$ vim /etc/fstab
-------------------------------------
# 加入一行:server:/nfs_share /mnt/nfs nfs defaults 0 0,`server:/nfs_share`是NFS服务器和共享目录的地址,`/mnt/nfs`是本地挂载点的路径
k8s-master:/var/nfs/data /nfs/data nfs defaults 0 0
-------------------------------------
# 挂载并验证
$ sudo mount -a
$ df -h
-------------------------------------
# 看到 `k8s-master:/var/nfs/data` 的挂载说明成功
文件系统                                                                                    容量  已用  可用 已用% 挂载点
k8s-master:/var/nfs/data                                                                    47G  6.7G   41G   15% /nfs/data
-------------------------------------
# 加入开机启动,并重启验证
$ sudo systemctl enable nfs-client.target
$ sudo systemctl enable rpcbind

验证NFS是否可用:

复制代码
# 在客户端上创建一个测试文件并写入内容,然后在`NFS`服务器上检查文件是否存在并是否包含相同的内容
$ echo "Hello World 01" > /nfs/data/test-01.txt
$ cat /nfs/data/test-01.txt

如果输出的内容为 "Hello World 01",则说明NFS配置正确,可用性正常。
3、在k8s-master节点上安装helm,请参考官方文档:https://helm.sh/zh/docs/intro/install/,推荐二进制安装方式
4、在kubernetes集群中安装nfs插件
nfs-client-provisioner是一个Kubernetes存储插件,可以使用NFS作为存储后端,为Pod提供 PV(Persistent Volume)和 PVC(Persistent Volume Claim)。

复制代码
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
$ kubectl create ns nfs-sc
$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --set storageClass.name=nfs-sc \
    --set nfs.server=k8s-master \
    --set nfs.path=/var/nfs/data \
    --set storageClass.defaultClass=true \
    --set image.repository=misterli/k8s.gcr.io_sig-storage_nfs-subdir-external-provisioner \
    -n nfs-sc

# 有需要可参考:https://www.cnblogs.com/cerberus43/p/15880234.html 或者:https://cloud.tencent.com/developer/article/1861347

查看是否安装成功:

复制代码
$ kubectl get pods -n nfs-sc
-------------------------------------
NAME                                               READY   STATUS    RESTARTS   AGE
nfs-subdir-external-provisioner-7f45674486-rtb8z   1/1     Running   0          7m32s
-------------------------------------

查看storageclass是否创建并且是默认的:

复制代码
$ kubectl get storageclass
-------------------------------------
NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-sc (default)   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   6h35m
-------------------------------------

5、在kubernetes中部署一个应用,验证nfs使用是否正常

通过在Kubernetes集群中创建一个 PVC,将其绑定到一个Pod上并验证它是否能够成功地挂载到NFS存储。

(1)、在 Kubernetes 集群中创建一个 PVC:

复制代码
$ vim nfs-pvc.yaml
-------------------------------------
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfs-sc
-------------------------------------
$ kubectl apply -f nfs-pvc.yaml

accessModes中指定了ReadWriteMany权限,这样这个PVC就可以被多个Pod共享,并且在不同的节点上可以同时挂载这个NFS存储。

(2)、创建一个测试用的 Pod,并将 PVC 绑定到该 Pod 上:

复制代码
$ vim test-pvc-pod.yaml
-------------------------------------
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: test-pod
    image: busybox:latest
    command:
      - "/bin/sh"
    args:
      - "-c"
      - "touch /mnt/SUCCESS && exit 0 || exit 1"
    volumeMounts:
      - name: test-pvc
        mountPath: "/mnt"
  restartPolicy: "Never"
  volumes:
    - name: test-pvc
      persistentVolumeClaim:
        claimName: nfs-pvc
-------------------------------------
$ kubectl apply -f test-pvc-pod.yaml

在这个Pod中,我们将上面创建的test-pvcPVC 绑定到了一个名为test-pvvolume上,然后将该volume挂载到了容器的/mnt目录下。

(3)、检查Pod是否正常启动并能够成功挂载NFS存储:

复制代码
$ kubectl get pod
-------------------------------------
NAME       READY   STATUS      RESTARTS   AGE
test-pod   0/1     Completed   0          9m9s
-------------------------------------
$ ll /var/nfs/data
-------------------------------------
drwxrwxrwx. 2 nobody           nobody    21  2月 17 14:57 default-nfs-pvc-pvc-94c99121-3b88-49c7-a60a-da3bf2c9403c
-------------------------------------
$ ll /var/nfs/data/default-nfs-pvc-pvc-94c99121-3b88-49c7-a60a-da3bf2c9403c/
-------------------------------------
-rw-r--r--. 1 root root 0  2月 17 14:57 SUCCESS
-------------------------------------

通过kubectl get pod命令可以看到Pod已经处于Completed状态,然后检查/var/nfs/data目录下是否存在如上nfs-pvc的目录。如果存在,则说明NFS存储已经成功挂载到了Pod中。

如果遇到挂载失败的情况,可以使用kubectl describe pod test-pod命令来查看Pod的详细日志信息,从而定位问题。

安装监控

Prometheus

作为 Kubernetes 监控的事实标准,有着强大的功能和良好的生态,安装Prometheus将涉及安装如下组件:

Prometheus:采用pull方式收集apiserver,scheduler,controller-manager,kubelet组件数 据,通过http协议传输

Prometheus Operator:为监控 Kubernetes service、deployment 和 Prometheus 实例的管理提供了简单的定义,简化在 Kubernetes 上部署、管理和运行 Prometheus 和 Alertmanager 集群,是一个系统监测和警报工具箱,用来存储监控数据。

NodeExporter:用于各node的关键度量指标状态数据。

KubeStateMetrics:收集kubernetes集群内资源对象数 据,制定告警规则。

复制代码
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
kubectl create ns prometheus
helm upgrade --install prometheus prometheus-community/kube-prometheus-stack -n prometheus         --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false   --set grafana.service.type=NodePort     --set grafana.service.nodePort=30003         --set grafana.adminPassword=admin       --set prometheus.service.type=NodePort  --set prometheus.prometheusSpec.image.registry=registry.aliyuncs.com    --set prometheus.prometheusSpec.image.repository=google_containers/prometheus        --set prometheusOperator.admissionWebhooks.patch.image.registry=registry.cn-hangzhou.aliyuncs.com       --set prometheusOperator.admissionWebhooks.patch.image.repository=google_containers/kube-webhook-certgen     --set kube-state-metrics.image.repository=google_containers/kube-state-metrics

# 上面如果仓库遇到网络容易中断问题,可先拉取到本地`helm pull prometheus-community/kube-prometheus-stack`,解压后使用本地安装`helm install prometheus ./kube-prometheus-stack ...`

通过kubectl get pod -n prometheus查看Pod的运行状态都为Runing,则监控部署成功,访问浏览器:http://10.20.33.11:30003,登录账号密码:admin/admin,首次登录需修改密码。

导入Linux主机详情监控模板:

(1)、进入官方仪表盘:Dashboards | Grafana Labs

(2)、搜索找到Linux主机详情

(3)、点击进入详情,并复制ID,回到我们的Grafana UI,导入

(4)、选择数据源为Prometheus,并导入

其他仪表盘推荐:

(1)、所有节点的监控仪表盘:Node Exporter Full | Grafana Labs

(2)、Cilium仪表盘:Cilium v1.11 Operator Metrics | Grafana Labs

(3)、K8S各个Node仪表盘:1 K8S for Prometheus Dashboard 20211010 EN | Grafana Labs

MetricServer

Metrics Server 是一种可扩展、高效的容器资源指标来源,适用于 Kubernetes 内置的弹性伸缩管道。

Metrics Server 从 Kubelets 收集资源指标,并通过Metrics API将它们暴露在 Kubernetes apiserver 中,供横向弹性伸缩和纵向弹性伸缩使用。指标 API 也可以通过 访问kubectl top,从而更容易调试弹性伸缩管道。

Metrics Server 不适用于非弹性伸缩目的。例如,不要把它当成监控解决方案,或作为监控解决方案指标的来源。在这种情况下,请直接从 Kubelet/metrics/resource端点收集指标。

复制代码
$ curl -LO https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
$ vim components.yaml
-------------------------------------
  template:
    metadata:
      labels:
        k8s-app: metrics-server
    spec:
      containers:
      - args:
        - --kubelet-preferred-address-types=InternalIP   # 修改这行,默认是InternalIP,ExternalIP,Hostname
        - --kubelet-insecure-tls  # 增加这行
        image: registry.cn-shenzhen.aliyuncs.com/cnmirror/metrics-server:v0.6.2 # 修改镜像地址,解决官方镜像地址无法拉取的问题
-------------------------------------
$ kubectl apply -f components.yaml
$ kubectl top pod -n kube-system
-------------------------------------
NAME                                 CPU(cores)   MEMORY(bytes)   
coredns-5bbd96d687-5crvs             1m           23Mi            
coredns-5bbd96d687-8khvc             1m           27Mi            
etcd-k8s-master                      11m          91Mi            
kube-apiserver-k8s-master            21m          494Mi           
kube-controller-manager-k8s-master   7m           84Mi            
kube-proxy-cwkvp                     1m           21Mi            
kube-proxy-jcblb                     1m           22Mi            
kube-proxy-kdxff                     1m           27Mi            
kube-scheduler-k8s-master            2m           38Mi            
metrics-server-64fdc8d969-f57qp      2m           22Mi
-------------------------------------

SHELL 复制 全屏

扩展知识

1、通过crictl查看容器、拉镜像等操作

复制代码
# 因为我这里安装的containerd,需要配置crictl的容器云运行时
$ crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
# 执行后生成的配置文件:/etc/crictl.yaml
$ crictl images
-------------------------------------
IMAGE                                                             TAG                 IMAGE ID            SIZE
docker.io/flannel/flannel-cni-plugin                              v1.1.2              7a2dcab94698c       3.84MB
docker.io/flannel/flannel                                         v0.21.2             7b7f3acab868d       24.2MB
-------------------------------------
其他操作:拉取镜像(crictl pull <image>)、查看容器(crictl ps) 等自行百度。

2、网络IP修改操作:Configure Static IP Address on RHEL 9 / CentOS Stream 9 - TechnixLeo

3、生成特定权限和配合的kubeconfig:生成特定权限和配额的kubeconfig - Kubernetes Notes

相关推荐
zyplanke1 天前
Kubernetes(四):Service
云原生·容器·kubernetes·k8s
Nazi61 天前
sealos部署k8s
运维·kubernetes·k8s
伟大的大威3 天前
K8s基于节点软亲和的高 CPU Pod 扩容与优先调度方案
k8s·cpu
听说唐僧不吃肉5 天前
DevOps篇之通过GitLab CI 流水线实现k8s集群中helm应用发布
k8s·devops
java资料站8 天前
k8s集群1.20.9
k8s·kubelet
退役小学生呀12 天前
十九、云原生分布式存储 CubeFS
分布式·docker·云原生·容器·kubernetes·k8s
久绊A12 天前
Minikube win安装步骤
k8s
照物华15 天前
深入理解Kubernetes核心:标签与标签选择器实战解析
云原生·容器·kubernetes·k8s
裸奔的大金毛15 天前
K8S - NetworkPolicy的使用
容器·kubernetes·k8s
ezreal_pan17 天前
Kubernetes 负载均衡现象解析:为何同一批次请求集中于单个 Pod
运维·云原生·k8s·traefik