当前位置: 首页 > news >正文

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集群

error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node: nodes "k8s-master" not found
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/.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/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: 443targetPort: 8443nodePort: 30001type: NodePortselector: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:- ReadWriteManyresources:requests:storage: 1GistorageClassName: 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-podimage: busybox:latestcommand:- "/bin/sh"args:- "-c"- "touch /mnt/SUCCESS && exit 0 || exit 1"volumeMounts:- name: test-pvcmountPath: "/mnt"restartPolicy: "Never"volumes:- name: test-pvcpersistentVolumeClaim: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-serverspec: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

相关文章:

Centos 9 安装 k8s

为了尽可能契合生产环境的部署情况&#xff0c;这里用kubeadm安装集群&#xff0c;同时方便跟随笔记一步步实践的过程&#xff0c;也更加了解k8s的一些特性和基础知识。 先决条件 这里将通过虚拟机安装3台centos stream 9服务器&#xff0c;并组成kubeneters集群&#xff08;…...

WiFi模块助力少儿编程:创新学习与实践体验

随着科技的飞速发展&#xff0c;少儿编程已经成为培养孩子们创造力和问题解决能力的重要途径之一。在这个过程中&#xff0c;WiFi模块的应用为少儿编程领域注入了新的活力&#xff0c;使得学习编程不再是单一的代码教学&#xff0c;而是一个充满创新与实践的综合性体验。 物联网…...

最新:Selenium操作已经打开的Chrome(免登录)

最近重新尝试了一下&#xff0c;之前写的博客内容。重新捋了一下思路。 目的就是&#xff0c;selenium在需要登录的网站面前&#xff0c;可能就显得有些乏力&#xff0c;因此是不是有一种东西&#xff0c;可以操作它打开我们之前打开过的网站&#xff0c;这样就不用登录了。 …...

三色标记过程

可达性分析 GC过程中需要对对象图遍历做可达性分析。使用了三色标记法进行分析。 什么三色&#xff1f; 白色&#xff1a;尚未访问过。 黑色&#xff1a;本对象已访问过&#xff0c;而且本对象 引用到 的其他对象 也全部访问过了。 灰色&#xff1a;本对象已访问过&#xff0…...

记录汇川:IO隔离编程

IO隔离&#xff1a;方便程序修改 无论是输入点坏了还是输出点坏了&#xff0c;或者人为接错线&#xff0c;或者对调点&#xff0c;我们只需要更改IO隔离得输入输出就可以了。方便。 停止按钮外接常闭&#xff0c;里面也使用常闭&#xff0c;为了断线检测功能(安全)&#xff…...

【Docker】容器的生态系统

Docker提供了一整套技术支持&#xff0c;包括核心技术、平台技术、支持技术。 核心技术 容器核心技术是指能让Container&#xff08;容器&#xff09;在host&#xff08;集群、主机&#xff09;上运行起来的那些技术。 1&#xff09;容器规范&#xff1a;OCI&#xff08;runt…...

AVL树讲解

AVL树 1. 概念2. AVL节点的定义3. AVL树插入3.1 旋转 4.AVL树的验证 1. 概念 AVL树是一种自平衡二叉搜索树。它的每个节点的左子树和右子树的高度差&#xff08;平衡因子&#xff0c;我们这里按右子树高度减左子树高度&#xff09;的绝对值不超过1。AVL的左子树和右子树都是AV…...

20240308-1-校招前端面试常见问题CSS

校招前端面试常见问题【3】——CSS 1、盒模型 Q&#xff1a;请简述一下 CSS 盒模型&#xff1f; W3C 模式&#xff1a;盒子宽widthpaddingbordermargin 怪异模式&#xff1a;盒子宽widthmargin Q&#xff1a;inline、block、inline-block 元素的区别&#xff1f; inline&am…...

linux系统简述docker

简述docker docker理念docker三要素docker平台架构docker运行的基本流程 docker理念 一次镜像&#xff0c;处处运行 基于go语言实现的项目 解决了运行环境和配置问题的软件容器&#xff0c;方便做持续集成并有助于整体发布的容器虚拟化技术 能够使硬件、操作系统和应用程序三者…...

【论文阅读】Mamba:选择状态空间模型的线性时间序列建模(一)

文章目录 Mamba:选择状态空间模型的线性时间序列建模介绍状态序列模型选择性状态空间模型动机&#xff1a;选择作为一种压缩手段用选择性提升SSM 选择性SSM的高效实现先前模型的动机选择扫描总览&#xff1a;硬件感知状态扩展 Mamba论文 Mamba:选择状态空间模型的线性时间序列建…...

漏洞复现-蓝凌LandrayOA系列

蓝凌OA系列 &#x1f52a; 是否利用过 优先级从高到低 发现日期从近到远 公司团队名_产品名_大版本号_特定小版本号_接口文件名_漏洞类型发现日期.载荷格式LandrayOA_Custom_SSRF_JNDI漏洞 LandrayOA_sysSearchMain_Rce漏洞 LandrayOA_Custom_FileRead漏洞...

计算机网络 路由算法

路由选择协议的核心是路由算法&#xff0c;即需要何种算法来获得路由表中的各个项目。 路由算法的目的很明显&#xff0c;给定一组路由器以及连接路由器的链路&#xff0c;路由算法需要找到一条从源路由器到目的路由器的最佳路径&#xff0c;通常&#xff0c;最佳路径是由最低…...

【C++ 学习】构造函数详解!!!

1. 类的6个默认成员函数的引入 ① 如果一个类中什么成员都没有&#xff0c;简称为空类。 ② 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 ③ 默认成员函数&#xff1a;用户没有显式实现&…...

【LeetCode】72. 编辑距离(中等)——代码随想录算法训练营Day55

题目链接&#xff1a;72. 编辑距离 题目描述 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 示例 1&#xff1a; 输入&#xff1a;w…...

关于手机是否支持h264的问题的解决方案

目录 现象 原理 修改内容 现象 开始以为是手机不支持h264的编码 。机器人chatgpt一通乱扯。 后来检查了下手机&#xff0c;明显是有h264嘛。 终于搞定&#xff0c;不枉凌晨三点起来思考 原理 WebRTC 默认使用的视频编码器是VP8和VP9&#xff0c;WebRTC内置了这两种编码器…...

借助Aspose.html控件,在 Java 中将 URL 转换为 PDF

如果您正在寻找一种将实时 URL 中的网页另存为 PDF文档的方法&#xff0c;那么您来对地方了。在这篇博文中&#xff0c;我们将学习如何使用 Java 将 URL 转换为 PDF。从实时 URL转换HTML网页可以像任何其他文档一样保存所需的网页以供离线访问。将网页保存为 PDF 格式可以轻松突…...

数据结构——堆的应用 堆排序详解

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…...

Sftp服务器搭建(linux)

Sftp服务器搭建&#xff08;linux&#xff09; 一、基本工作原理 FTP的基本工作原理如下&#xff1a; 1&#xff09;建立连接&#xff1a;客户端与服务器之间通过TCP/IP建立连接。默认情况下&#xff0c;FTP使用端口号21作为控制连接的端口。​​​​​​​ 2&#xff09;身…...

Neo4j 新手教程 环境安装 基础增删改查 python链接 常用操作 纯新手向

Neo4j安装教程&#x1f680; 目前在学习知识图谱的相关内容&#xff0c;在图数据库中最有名的就是Neo4j,为了降低入门难度&#xff0c;不被网上很多华丽呼哨的Cypher命令吓退&#xff0c;故分享出该文档&#xff0c;为自己手动总结&#xff0c;包括安装环境&#xff0c;增删改查…...

PyTorch2.0 环境搭建详细步骤(Nvidia显卡)

Step 1 、查看显卡驱动版本 Step2、下载CUDA 11.7 或者11.8&#xff08;我自己用的这个&#xff09;也行,稍后我会贴出来版本匹配对应表 https://developer.nvidia.com/cuda-toolkit-archive Step3、下载CUDNN cuDNN 9.0.0 Downloads | NVIDIA Developer Step4、安装anconda&…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...