组件版本链接
Ubuntu Server20.04.6 LTShttps://ubuntu.com/download/alternative-downloads
Containerdv1.7.18https://github.com/containerd/containerd
Dockerv27.0.2https://docs.docker.com/engine/install/ubuntu/
kubeadm kubectl kubeletv1.27.6-00
kubernetes-dashboardv2.7.0https://github.com/kubernetes/dashboard
metrics-serverv0.6.1https://github.com/kubernetes-sigs/metrics-server/releases
NGINX Ingress Controllerv1.5.1https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters
Local Path Provisonerv0.0.23https://github.com/rancher/local-path-provisioner

img


Control-plane(Master)节点核心组件https://kubernetes.io/docs/concepts/overview/components/

组件说明
kube-apiserver对外提供RESTful API 接口、集群管理事件的统一入口,负责集群的监听、认证、授权、准入控制。对内负责协调 kube-controller-manager、kube-scheduler、kubelet、kube-proxy,所有的对象资源的增删改查都交给 APIServer 处理后再提交 给etcd做持久化存储。
kube-controller-manager从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。负责管理集群各种资源,保证资源处于预期的状态。Controller Manager由多种controller组成,包括Node Controller、 Job controller、Endpoints Controller、Service Account & Token Controllers 等。
kube-schedulerkube-scheduler,在预选阶段首先过滤掉不满足当前Pod请求的Nodes。在优选阶段,根据一系列函数对剩余可承接本次调 度的Nodes评分,选出其中得分最高的Node,并将调度决定告知kube-apiserver,这个过程叫做绑定(Binding)。
etcdetcd 是一个高可用的分布式键值数据库,可用于服务发现。etcd采用raft一致性算法,基于Go语言实现。Etcd作为一个高可 用键值存储系统,天生就是为集群化而设计的。用于保存Kubernetes资源状态数据。

worker 节点核心组件:

组件说明
kubelet每个Nodes都以systemd服务的形式运行着软件包安装的kubelet。kubelet是kube-apiserver在node上的容器运行时代理,当 Scheduler 确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的kubelet,kubelet会根据这 些信息调用该节点上的容器运行时创建和维护容器的生命周期,并默认每隔10s向kube-apiserver报告当前节点的运行状态
kube-proxy集群出厂使用DaemonSet控制器在每个Nodes上运行kube-proxy Pod,kube-proxy配合Service做服务发现,负责维护每个Nodes 上iptables NAT表的自定义链或LVS的路由规则表。将访问的Service的TCP/UDP数据流转发到后端Pod的真实私有IP地址。
Container Runtime容器运行时是负责运行容器的软件。Kubernetes支持多个容器运行环境: Docker(+ cri-dockerd)、Containerd、CRI-O以及任何 其它实现Kubernetes CRI(容器运行环境接口)。
  1. 集群主机规划
  2. 封装 节点模板Kubernetes
  3. 使用 部署 集群kubeadm Kubernetes
  4. 安装 Calico CNI 插件
  5. 部署 kubernetes Dashboard
  6. 部署 metric Server
  7. 部署 NGINX Ingress Controller
  8. 部署 Rancher Local Path StorageClass
  9. 配置客户端名称空间和上下文快捷 kubectx
  10. 安装 kubectl cli 插件管理工具 krew
  11. 集群主机规划

一.、节点主机规划

image-20240630005705212

二、 封装 Kubernetes 节点模板机

相关文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

1. 安装 Ubuntu-20.04.6 Server 虚拟机

官方硬件最低要求:2 cores 、2G memory 、40G Hard disk、关闭 swap 交换内存

image-20240630010111228

image-20240630010121009

image-20240630010131920

image-20240630010139405

image-20240630010145624

image-20240630010156442

image-20240630010203432

image-20240630010210559

image-20240630010217955

image-20240630010224525

image-20240630010231073

image-20240630010237815

image-20240630010243587

image-20240630010249145

image-20240630010255184

image-20240630010301404

image-20240630010308291

image-20240630010313599

2. 把主机规划清单写入/etc/fstab

candidate@k8s:~$ sudo -i
[sudo] password for candidate:   //输入 candidate 用户密码
root@k8s:~# apt-get upgrade -y
root@k8s:~# cat > /etc/hosts << EOF
127.0.0.1 localhost
192.168.126.99 client client.lab.example.com
192.168.126.100 master master.lab.example.com
192.168.126.101 node1 node1.lab.example.com
192.168.126.102 node2 node2.lab.example.com
192.168.126.103 node3 node3.lab.example.com
192.168.126.55 registry registry.lab.example.com
EOF

3. 设置内核参数

root@k8s:~# cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
EOF
root@k8s:~# echo br_netfilter >> /etc/modules && modprobe br_netfilter 
root@k8s:~# sysctl --system

4. 关闭交换内存

root@k8s:~# swapoff -a
root@k8s:~# sed -ir 's/.*swap/#&/g' /etc/fstab
root@k8s:~# rm -Rf /swap.img
root@k8s:~# free -m

5. 安装配置 Containerd+RunC 容器运行时

官方最新版本:https://github.com/containerd/containerd/releases

1) 配置 Docker apt 仓库

root@k8s:~# apt-get remove docker docker.io containerd runc -y
root@k8s:~# apt-get install ca-certificates curl gnupg lsb-release -y
root@k8s:~# sudo install -m 0755 -d /etc/apt/keyrings
root@k8s:~# sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
root@k8s:~# sudo chmod a+r /etc/apt/keyrings/docker.asc

root@k8s:~# echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
root@k8s:~# apt-get update

2) 安装 containerd、docker-ce

root@k8s:~# apt-cache madison containerd.io  # 或使用 apt-cache policy containerd.io 查看仓库中可用 containerd 的版本 
containerd.io | 1.6.21-1 | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
containerd.io | 1.6.20-1 | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages 
containerd.io | 1.6.19-1 | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
... ...
root@k8s:~# apt-cache madison docker-ce      # 或使用 apt-cache policy docker-ce 查看仓库中可用 docker-ce 的版本 
docker-ce | 5:24.0.0-1~ubuntu.20.04~focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages 
docker-ce | 5:23.0.6-1~ubuntu.20.04~focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages 
docker-ce | 5:23.0.5-1~ubuntu.20.04~focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
... ...
root@k8s:~# apt-get install containerd.io docker-ce docker-ce-cli -y   # 本次我们使用默认的最新版本

3) 配置containerd

root@k8s:~# containerd config default | tee /etc/containerd/config.toml 
root@k8s:~# vim /etc/containerd/config.toml
...
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
sand
# 在 67 行,修改 pause 镜像位置为阿里云 kubernetes 镜像仓库
box_image = "registry.aliyuncs.com/google_containers/pause:3.9"
...
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
...
# 在 125 行,启动 systemd 作为 cgroup 驱动
SystemdCgroup = true
...
# 在 167 行,跳过私有镜像仓库 TLS 验证
[plugins."io.containerd.grpc.v1.cri".registry.configs]
  [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.lab.example.com".tls]
    insecure_skip_verify = true
...
# 在 173 行,增加自己的镜像加速地址
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]                      
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://3ca84f1l.mirror.aliyuncs.com"]
root@k8s:~# systemctl restart containerd

备注:registry-mirrors 替换成自己申请的阿里云 docker 镜像加速器:网址:https://cr.console.aliyun.com/#/accelerator 注册、登录左下角,然后在页面上可以看到加速器 地址,类似于:https://123abc.mirror.aliyuncs.com)

4) 配置docker

root@k8s:~# cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries": ["registry.lab.example.com","192.168.126.55","registry"],
"registry-mirrors": ["https://mfh4yfhu.mirror.aliyuncs.com"]
}
EOF

备注:registry-mirrors 替换成自己申请的阿里云 docker 镜像加速器:网址:https://cr.console.aliyun.com/#/accelerator 注册、登录左下角,然后在页面上可以看到加速器 地址,类似于:https://123abc.mirror.aliyuncs.com

root@k8s:~# sed -i 's/^GRUB_CMDLINE_LINUX=.*/GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"/' /etc/default/grub
root@k8s:~# update-grub

解决 Ubuntu 或 Debian "WARNING: No swap limit support" "WARNING: Your kernel does not support swap limit capabilities. Limitation discarded." 相关文档 https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities

如果还有,尝试重启

root@k8s:~# gpasswd -a candidate docker
root@k8s:~# systemctl enable docker
root@k8s:~# systemctl restart docker 
root@k8s:~# docker info

6) 安装 kubeadm、kubelet 软件包

root@k8s:~# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
root@k8s:~# cat > /etc/apt/sources.list.d/kubernetes.list << EOF      
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF   # 阿里源
root@k8s:~# apt-get update
root@k8s:~# apt-cache madison kubelet
root@k8s:~# apt-get install kubelet=1.27.6-00 kubeadm=1.27.6-00 kubectl=1.27.6-00 -y
root@k8s:~# systemctl enable kubelet

7) 编辑/etc/crictl.yaml 指定容器运行时

root@k8s:~# crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
root@k8s:~# crictl config image-endpoint unix:///var/run/containerd/containerd.sock

8) 设置普通用户 candidate 无密码提权

root@k8s:~# echo "candidate ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

9) 测试环境,关闭 自动更新ubuntu

root@k8s:~# sed -i 's/1/0/' /etc/apt/apt.conf.d/10periodic
root@k8s:~# sed -i 's/1/0/' /etc/apt/apt.conf.d/20auto-upgrades

10) Vmware workstaion 环境使用 Vmware tools 压缩虚拟机磁盘空间,降低实验本地存储压力

root@k8s:~# vmware-toolbox-cmd disk list
root@k8s:~# vmware-toolbox-cmd disk shrink /
root@k8s:~# vmware-toolbox-cmd disk shrink /boot

11) 封装模板

root@k8s:~# history -c
root@k8s:~# init 0

12) 关机后,删除光驱设备,创建快照,以备后续使用。

13) 使用该模板虚拟机克隆出 client、master、node1、node2、node3五台 VM。

14) 登录虚拟机按照主机规划清单分别设置主机名,修改网卡 地址。99、100、101、102、103改成自己的地址规划

client节点

root@k8s:~$ sudo hostnamectl set-hostname client
root@k8s:~$ sudo sed -i 's/66/99/' /etc/netplan/00-installer-config.yaml 
root@k8s:~$ sudo netplan apply
root@k8s:~$ init 0

master节点

root@k8s:~$ sudo hostnamectl set-hostname master
root@k8s:~$ sudo sed -i 's/66/100/' /etc/netplan/00-installer-config.yaml root@k8s:~$ sudo netplan apply
root@k8s:~$ init 0

node1节点

root@k8s:~$ sudo hostnamectl set-hostname node1
root@k8s:~$ sudo sed -i 's/66/101/' /etc/netplan/00-installer-config.yaml
root@k8s:~$ sudo netplan apply
root@k8s:~$ init 0

node2节点

root@k8s:~$ sudo hostnamectl set-hostname node2
root@k8s:~$ sudo sed -i 's/66/102/' /etc/netplan/00-installer-config.yaml
root@k8s:~$ sudo netplan apply
root@k8s:~$ init 0

node3节点:备用 worker 节点,可选

root@k8s:~$ sudo hostnamectl set-hostname node3
root@k8s:~$ sudo sed -i 's/66/103/' /etc/netplan/00-installer-config.yaml
root@k8s:~$ sudo netplan apply
root@k8s:~$ init 0

三、使用 kubeadm 部署 k8s 集群

相关文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

1. 配置 master 节点到 node1、node2 节点的无密码访问

candidate@master:~$ export CLIENTS="master node1 node2 client"
candidate@master:~$ export NODES="master node1 node2"
candidate@master:~$ export WORKERS="node1 node2"
candidate@master:~$ ssh-keygen -N '' -f ~/.ssh/id_rsa
candidate@master:~$ for client in $CLIENTS;do ssh-copy-id $client;done

2. 在 master 节点 kubeadm init 执行初始化

candidate@master:~$ source <(kubeadm completion bash)
candidate@master:~$ sudo kubeadm init --kubernetes-version=v1.27.6 --apiserver-advertise-address=192.168.126.100 \
--image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
... ...
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 192.168.126.100:6443 --token rxqhqd.uzn6bhwxhnrikddx \
--discovery-token-ca-cert-hash sha256:e46bd1d837685004fe74923652839786ce491b24bd1d696af62d771d39ca1cb8
(备注:记录该条命令用于从 worker 节点,主动加入 control-plane)

image-20240630162712847

记录该条命令用于从 worker 节点,主动加入 control-plane

3. 分别从 node1、node2 节点执行 kubeadm join 申请加入 control-plane

candidate@master:~$ for worker in $WORKERS;do ssh $worker sudo kubeadm join 192.168.126.100:6443 --token 5u40p5.ytralpeykx2ps2oy --discovery-token-ca-cert-hash sha256:0dde2bdd1d53d2526976dbaedebdb9f85dddcf131667e934fbfceb88d9af570e;done

以上部分替换上一个步骤中,您 master 节点执行 kubeadm init 的回显

4. 为各成员节点和客户端配置登录凭证

1) 为 master 节点的 root 账户配置登录凭证及 kubectl、kubeadm 命令行补齐

candidate@master:~$ sudo bash -c "echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> /root/.bash_profile" candidate@master:~$ sudo bash -c "echo 'source <(kubeadm completion bash)' >> /root/.bash_profile" 
candidate@master:~$ sudo bash -c "echo 'source <(kubectl completion bash)' >> /root/.bash_profile"

2) 配置各客户端节点 candidate 账户配置登录凭证及 kubectl、kubeadm 命令行补齐

candidate@master:~$ for client in $CLIENTS;do ssh $client mkdir ~/.kube;done
candidate@master:~$ sudo cp /etc/kubernetes/admin.conf /home/$USER/.kube/config
candidate@master:~$ sudo cp /etc/kubernetes/pki/ca.crt /home/$USER/.kube/
candidate@master:~$ sudo chown $USER.$USER ~/.kube/*
candidate@master:~$ for x in node1 node2 client;do scp ~/.kube/* $x:~/.kube/;done
candidate@master:~$ for client in $CLIENTS;do ssh $client "echo 'source <(kubeadm completion bash)' >> ~/.bash_profile";done candidate@master:~$ for client in $CLIENTS;do ssh $client "echo 'source <(kubectl completion bash)' >> ~/.bash_profile";done candidate@master:~$ for client in $CLIENTS;do ssh $client source ~/.bash_profile;done

5. 安装后测试

image-20240630163744353

6. 配置从 client 到 master、node1、node2 节点的无密码访问:

candidate@client:~$ ssh-keygen -N '' -f ~/.ssh/id_rsa
candidate@client:~$ for x in master node1 node2;do ssh-copy-id $x;done 
candidate@client:~$ rm -f ~/.ssh/authorized_keys

四、安装 calico CNI 插件

image-20240630164027730

相关文档:https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises

1. 安装 calico

1) 50 个 node 节点以内的集群

candidate@client:~$ kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml

2) 超过 50 个 node 节点的集群

candidate@client:~$ wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico-typha.yaml -o calico.yaml

如果集群中 node 节点数量超过 50 个,建议您使用 Typha。如果集群中 node 节点数量超过 100 个,必须要使用 Typha 每 100-200 个节点使用一个副本。 在生产环境中,我们建议至 少运行 3 个副本,以减少滚动升级的影响。副本数应始终小于节点数,否则滚动升级将停止。

2. 检查集群状态

image-20240630165224701

五、部署 kubernetes-dashboard v2.7.0

相关文档:https://github.com/kubernetes/dashboard

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

image-20240630170148055

1. 下载发布 kubernetes-dashboard mainfest

candidate@client:~$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

image-20240630170517205

2. 创建用户 dashboard-user

candidate@client:~$ kubectl create sa dashboard-admin -n kube-system

3. 给 dashboard-user 绑定 cluster-admin 集群角色

candidate@client:~$ kubectl create clusterrolebinding UI --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

4. 使用 dashboard-user 的 token 访问 kubernetes-dashboard

candidate@client:~$ kubectl create token -n kube-system dashboard-admin     # 记录 token,以备登录 dashboard 使用 
candidate@client:~$ kubectl port-forward -n kubernetes-dashboard svc/kubernetes-dashboard --address 0.0.0.0 8080:443

备注:使用 admin-user 的用户 token 访问 client 节点 https://192.168.126.99:8080

image-20240630171153066

六、部署 metric-server v0.6.3

官网地址:https://github.com/kubernetes-sigs/metrics-server

Metrics Server 是一个可扩展的、高效的容器资源度量源,用于 Kubernetes 内置的自动伸缩管道。
Metrics Server 从 Kubelets 收集资源指标,并通过 Metrics API 在 Kubernetes apiserver 中公开它们,供 Horizontal Pod Autoscaler 和 Vertical Pod Autoscaler 使用。kubectl top 还可以访问 Metrics API,从而更容易调试自动伸缩管道。
Metrics Server 并非用于非自动伸缩目的。例如,不要使用它将指标转发到监视解决方案,或者作为监视解决方案指标的来源。
Metrics Server 提供:

  • 适用于大多数集群的单一部署。
  • 快速自动缩放,每 15 秒收集一次指标。
  • 资源效率,集群中的每个节点使用 1m CPU 和 2 MB 内存。
  • 可扩展支持多达 5,000 个节点集群。
# metrics-server 所使用的 docker 镜像默认存放在 k8s.gcr.io,由于无法访问谷歌,无法按照官网直接安装:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml 或
https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml

1. 安装 metrics-server

candidate@client:~$ wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml
candidate@client:~$ vim components.yaml
... ...
spec:
  template:
    spec:
      containers:
      - args:
      - --cert-dir=/tmp
      - --secure-port=4443
      - --kubelet-insecure-tls                # 编辑 137 行添加--kubelet-insecure-tls,不验证 node 节点 kubelet 的 CA
      - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
      - --kubelet-use-node-status-port
      - --metric-resolution=15s
      image: sdedu/metrics-server:v0.6.3 #编辑 141 行,修改镜像地址,原地址为 k8s.gcr.io/metrics-server/metrics-server:v0.6.3国内无法访问
      imagePullPolicy: IfNotPresent
...
...
candidate@client:~$ kubectl apply -f components.yaml

2. 使用 top 子命令测试

image-20240630172334695

candidate@client:~$ kubectl top nodes
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
master   163m         8%     1079Mi          58%
node1    56m          2%     610Mi           33%
node2    69m          3%     648Mi           35%

七、部署 Nginx ingress controller v1.7.1

相关文档:https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters

candidate@client:~$ wget \
https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.1/deploy/static/provider/baremetal/deploy.yaml
vim deploy.yaml
...
template:
...
  spec:
  hostNetwork: yes     # 在 418 行插入 hostNetwork: yes 参数。
  containers:
...
candidate@client:~$ kubectl apply -f deploy.yaml

image-20240630173251542

八、部署 Rancher Local Path StorageClass

相关说明:https://github.com/rancher/local-path-provisioner

Local Path Provisioner 为 Kubernetes 用户提供了一种利用每个节点中的本地存储的方法。根据用户配置,Local Path Provisioner 将自动在节 点上创建基于 hostPath 类型持久卷。它利用了 Kubernetes Local Persistent Volume feature 引入的特性,但使其成为比 Kubernetes 中内置的本地卷 特性更简单的解决方案。

candidate@client:~$ wget \
https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.24/deploy/local-path-storage.yaml
vim local-path-storage.yaml
... ...
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-path                                          # 90-93 StorageClass 可以在 行修改 参数 
provisioner: rancher.io/local-path
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
... ...
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: local-path-config
  namespace: local-path-storage
data:
  config.json: |-
    {
      "nodePathMap":[
      {
        "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
        "paths":["/opt/local-path-provisioner"]       # 可在 107 行修改节点 hostpath
      }
      ]
    }
... ...
candidate@client:~$ kubectl apply -f local-path-storage.yaml

image-20240630174431161

九、配置客户端名称空间和上下文快捷 kubectx

官方说明:https://github.com/ahmetb/kubectx

candidate@client:~$ sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx 
candidate@client:~$ sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx 
candidate@client:~$ sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens

image-20240630174746177

十、安装 kubectl cli 插件管理工具

image-20240630180606287

1. 简介

Krew 是由 kubernetes 官方开发的一个可以轻松管理 kubectl 插件的工具。Krew 帮助您发现插件,在您的机器上安装和管理它们。它类似于 apt、dnf 或 brew 等工具。

  • Krew 适用于所有主要平台,例如 macOS、Linux 和 Windows
  • 目前 Krew 上提供了 210 个 kubectl 插件。(支持的插件列表:https://krew.sigs.k8s.io/plugins)
  • 对于 kubectl 用户:Krew 帮助您以一致的方式查找、安装和管理 kubectl 插件。
  • 对于插件开发人员:Krew 可帮助您在多个平台上打包和分发插件,并使它们可被发现。

2. 安装 krew

相关说明:https://krew.sigs.k8s.io/docs/user-guide/setup/install/

(
  set -x; cd "$(mktemp -d)" &&
  OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
  KREW="krew-${OS}_${ARCH}" &&
  curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
  tar zxvf "${KREW}.tar.gz" &&
  ./"${KREW}" install krew
)
candidate@client:~$ echo "PATH=$PATH:$HOME/bin:${HOME}/.krew/bin" >> ~/.bash_profile
candidate@client:~$ source ~/.bash_profile
candidate@client:~$ kubectl-krew version

3. krew 子命令说明

image-20240630182808381

4. krew常用插件

image-20240630182907329

image-20240630182930040