配置 Kubectl

命令行工具需要配置 K8s 集群的连接及认证信息,才能与之交互。
kubectl 本身默认设置了配置文件的路径: $HOME/.kube/config ,所以应该将配置文件放置在路径

配置集群连接及认证信息

在初始化集群的 master 节点上

  1. cp /etc/kubernetes/admin.conf ~/.kube/config
  2. kubectl config get-contexts
  3. kubectl get nodes

在其他节点上

如果你想运行 kubectl 的节点在 K8s 集群外部(跳板机,个人工作笔记本),需要把配置文件从master节点上下载放在该节点上

  1. scp root@<master ip>:/etc/kubernetes/admin.conf ~/.kube/config
  2. kubectl config get-contexts
  3. kubectl get nodes
  4. # 如果 kubeconfig 文件没有放在默认路径下,也可以通过参数指定
  5. kubectl --kubeconfig ~/.kube/config config get-contexts
  6. kubectl --kubeconfig ~/.kube/config get nodes

kubectl 命令行补全

  1. # 直接生效
  2. source <(kubectl completion bash)
  3. # 下次登录时自动运行补全命令
  4. cat << 'EOF' | tee -a ~/.profile
  5. # kubectl completion
  6. if command -v kubectl; then
  7. source <(kubectl completion bash)
  8. fi
  9. EOF

切换默认的命名空间

kubectl get namespaces
kubectl config set-context --current --namespace kube-system

查询

查看基础信息

# 查看集群中组件的运行情况
kubectl cluster-info
# 查看集群中组件的状态    Warning: v1 ComponentStatus is deprecated in v1.19+
kubectl get componentstatus

查字段词典

不知道 yaml 文件咋写,可以直接使用 explain 子命令,确保是当前版本的,比网上查文档更快捷,更靠谱

kubectl explain <type>.<fieldName>[.<fieldName>] [options]
# 查查 deployment 的 spec 字段下面有哪些参数,看看哪个字段是配置为不要滚动升级的,一级一级查下去就行
kubectl explain deployment
kubectl explain deployment.spec
kubectl explain deployment.spec.strategy

基础命令

运行镜像 kubectl run

在集群上运行指定的镜像
用法

kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]

示例

# 运行一个镜像,作为一个 deployment
kubectl run my_deployment --image=nginx

创建服务 kubectl expose

暴露一个资源作为一个 Kubernetes service
用法

kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [options]
# 默认TCP

示例

# 暴露 my_deployment 的80端口,
kubectl expose deployment my_deployment --port=80 --target-port=80 --name=my_nginx_service

创建资源 kubectl create

通过文件(支持使用 json 和 yaml)创建一个资源,这个资源可能是任何一种 Kubernetes 对象
用法

kubectl create -f FILENAME [options]

示例

# 常规使用文件创建资源
kubectl create -f ./pod.json
# 从标准输入stdin创建资源
cat ./pod.json | kubectl create -f -
# 使用v1 API 格式的 json 编辑一个 yaml,然后用编辑过后的数据来创建资源
kubectl create -f docker-registry.yaml --edit --output-version=v1 -o json

更新镜像

kubectl --namespace=default set image deployment/eureka-0 eureka-0=registry.docker.b2c:5999/shop_public/shop_eureka:jenkins-cicd-${BUILD_NUMBER}

升级状态管理 kubectl rollout

可以暂停和恢复,最主要还是可以看历史

kubectl rollout history deployment my_deployment
kubectl rollout history deployment my_deployment --reverison=1
kubectl rollout history deployment my_deployment --reverison=2

小技巧

# 通过测试 run 生成 yaml
kubectl run my-deployment --image=nginx -o yaml --dry-run > my-deployment.yaml
# 通过 get 已有对象 导出 yaml,不加 --export 可以用作状态获取
kubectl get statefulset some-statefulset -o yaml --export > some-statefulset.yaml
# 查看 yaml api 的下面有哪些字段
kubectl explain pod.spec.affinity.podAffinity