| 组件 | 版本 | 链接 |
|---|---|---|
| Ubuntu Server | 20.04.6 LTS | https://ubuntu.com/download/alternative-downloads |
| Containerd | v1.7.18 | https://github.com/containerd/containerd |
| Docker | v27.0.2 | https://docs.docker.com/engine/install/ubuntu/ |
| kubeadm kubectl kubelet | v1.27.6-00 | |
| kubernetes-dashboard | v2.7.0 | https://github.com/kubernetes/dashboard |
| metrics-server | v0.6.1 | https://github.com/kubernetes-sigs/metrics-server/releases |
| NGINX Ingress Controller | v1.5.1 | https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters |
| Local Path Provisoner | v0.0.23 | https://github.com/rancher/local-path-provisioner |

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-scheduler | kube-scheduler,在预选阶段首先过滤掉不满足当前Pod请求的Nodes。在优选阶段,根据一系列函数对剩余可承接本次调 度的Nodes评分,选出其中得分最高的Node,并将调度决定告知kube-apiserver,这个过程叫做绑定(Binding)。 |
| etcd | etcd 是一个高可用的分布式键值数据库,可用于服务发现。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(容器运行环境接口)。 |
- 集群主机规划
- 封装 节点模板Kubernetes
- 使用 部署 集群kubeadm Kubernetes
- 安装 Calico CNI 插件
- 部署 kubernetes Dashboard
- 部署 metric Server
- 部署 NGINX Ingress Controller
- 部署 Rancher Local Path StorageClass
- 配置客户端名称空间和上下文快捷 kubectx
- 安装 kubectl cli 插件管理工具 krew
- 集群主机规划
一.、节点主机规划

二、 封装 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 交换内存


















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)

记录该条命令用于从 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. 安装后测试

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 插件
相关文档: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. 检查集群状态

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

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

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

六、部署 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 子命令测试

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

八、部署 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

九、配置客户端名称空间和上下文快捷 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

十、安装 kubectl cli 插件管理工具
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 子命令说明

4. krew常用插件

