Kubernets User Guide

Kubernetes 用户指南

常用设置

命令行自动补全

推荐安装 Oh My Zsh,并打开 kubectl 及 kubectx 插件。

# ~/.bashrc 命令行自动补全
source <(kubectl completion bash)

# ~/.zshrc 命令行自动补全
source <(kubectl completion zsh)

# 添加 kubectl 的别称 k 自动补全
alias k=kubectl
complete -F __start_kubectl k

krew 插件管理命令

命令行中运行以下代码:

(
  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
)

设置路径

export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"

安装常用插件

kubectl krew install ctx
kubectl krew install ns
RPS1='$(kubectx_prompt_info)'

VS Code 设置

		"vs-kubernetes": {
			"vs-kubernetes.namespace": "",
			"vs-kubernetes.kubectl-path": "",
			"vs-kubernetes.helm-path": "",
			"vs-kubernetes.minikube-path": "",
			"vs-kubernetes.kubectlVersioning": "user-provided",
			"vs-kubernetes.outputFormat": "yaml",
			"vs-kubernetes.kubeconfig": "/root/.kube/config",
			"vs-kubernetes.knownKubeconfigs": [],
			"vs-kubernetes.autoCleanupOnDebugTerminate": false,
			"vs-kubernetes.nodejs-autodetect-remote-root": true,
			"vs-kubernetes.nodejs-remote-root": "",
			"vs-kubernetes.nodejs-debug-port": 9229,
			"vs-kubernetes.dotnet-vsdbg-path": "~/vsdbg/vsdbg",
			"vs-kubernetes.local-tunnel-debug-provider": "",
			"checkForMinikubeUpgrade": true,
			"disable-linters": [
				"resource-limits"
			],
			"imageBuildTool": "Docker"
		}

常用路径

路径 作用
~/.kube/config 命令行 kubectl 配置文件
export KUBECONFIG= 设置当前 kubectl 配置文件

常用命令

Hello World

# 新建 Pod:u20-tools
kubectl run u20-tools --image ma3310/ubuntu:20.04-tools -it --restart=Never

巡查集群状态

命令 作用
kubectl version 查看 Kubernetes 客户端及服务器版本
kubectl cluster-info 查看集群状态
kubectl get componentstatuses 查看集群健康状态
kubectl get nodes 巡查节点状态
kubectl describe nodes docker-desktop 巡查节点详情
kubectl api-resources 巡查可用资源类型
kubectl 
kubectl get all -A 巡查所有创建对象
kubectl get all --selector LABEL=VALUE 根据 label 巡查所有创建对象
kubectl get RESOURCE -o yaml > FILE.yaml
kubectl get deployments --namespace=kube-system 巡查 kube-system 下的 Deployments
kubectl get daemonsets --namespace=kube-system 巡查 kube-system 下的 DaemonSets
kubectl get services --all-namespaces 巡查所有名字空间下的 Services
kubectl edit TYPE NAME 在线编辑服务配置

开关项

开关项 作用
--no-headers 只输出数据,以供后续分析

新建 k8s 资源

命令 作用
kubectl create -f YAML 根据 YAML 声明的内容创建 K8s 对象,如:Pod、Service、etc

namespace

Kubernetes 集群上的对象按名字空间管理,命令行 kubectl 默认和 default 名字空间的对象进行交互。

命令 作用
kubectl get namespaces 查看所有 namespace
kubectl config set-context --current --namespace NAMESPACE 设置当前 namespace

存储

命令 作用
kubectl explain pod.spec.volumes 支持存储类型
kubectl get storageclass -A
kubectl describe storageclass standard

secret

命令 作用
kubectl get secrets -o json SECRET 查看 secret 内容

Pod

命令 作用
kubectl get pods --all-namespaces 查看所有 Pods
kubectl describe pod POD_NAME 查看 Pod 详细
kubectl exec -it POD_NAME -- COMMAND 在 Pod 的第一个容器中执行命令行,-- 分隔命令行参数

Replicas

命令 作用
kubectl scale --replicas=NUMBER TYPE NAME 在线扩展 k8s 对象

Deployment

命令 作用
kubectl create deployment DEPLOYMENT --image=IMAGE 从镜像创建
kubectl edit deployment DEPLOYMENT 在线调整,改变 image 会产生新版本
kubectl rollout history deployment DEPLOYMENT 查询发布版本
kubectl rollout undo deployment  回滚
kubectl explain Deployment 检查支持的参数及其设定值

配置

命令 作用
kubectl config view 查看默认配置
kubectl config get-contexts 巡查所有用户工作环境
kubectl config current-context 确认当前工作环境
kubectl config set-context CONTEXT_NAME --namespace=kube-system 创建用户工作环境
kubectl config use-context system 引用用户工作环境

管理

--overwrite 开关可以覆盖已有标签 

命令 作用
kubectl label TYPE NAME LABEL=VALUE 给对象添加标签
kubectl label TYPE NAME LABEL- 删除标签
kubectl logs POD_NAME -f 持续查看 pod 日志
kubectl port-forward POD_NAME HOST_PORT:POD_PORT 映射主机端口到 pod

安全

命令 作用
kubectl -n kube-system describe secret default 返回默认登录密码

Kube Proxy

运行 Kube Proxy 后可用 curl http://localhost:8006/version 与 k8s API 交互。

命令 作用
kubectl proxy --port=8006 & 映射 api 到 localhost:8006

Kubernets Dashboard

部署

访问 Dashboard 入口,如果没有出现登录界面,根据 Dashboard 兼容信息手动部署:

# 如果存在不兼容的 Dashboard 发布,先删除
kubectl delete ns kubernetes-dashboard

# 部署 Dashboard
# 151.101.228.133:443: wsarecv: An existing connection was forcibly closed by the remote host.
# raw.githubusercontent.com 无法访问时,需设置代理
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
kubectl proxy
# 向配置文件添加默认密码
$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
kubectl config set-credentials docker-for-desktop --token="${TOKEN}"

参考

Author: njun
njun's picture
Updated: 2022/07/07