问题描述

kubectl,是 Kubernetes 集群管理命令,用于管理 Kubernetes 集群,完成集群维护任务。

该笔记将记录:命令 kubectl 的安装、配置、使用方法,以及常见问题处理。

解决方案

安装 kubectl 命令

关于版本选择:根据官网,kubelet 命令的 次要版本号 应与集群的次版本号最大差一(比如,版本 kubectl-v1.2 可以正常操作版本 Kubernetes v1.1、v1.2、v1.3 的集群),以防止出现某些意料之外的情况。

第一步、安装命令

官方支持通过包管理器安装,但是它是 GOOGLE 源无法访问,我们使用阿里云镜像仓库:



# CentOS 7.4(如果使用阿里云镜像仓库) yum install -y kubelet-1.16.2



通用安装方法



# 下载稳定版本;
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

# 下载特定版本(例如 v1.15.0 版本)
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/linux/amd64/kubectl

# 授权,移动,验证
chmod +x ./kubectl
mv ./kubectl /usr/local/bin/kubectl
kubectl version --client

################################################################################
# 其他系统
################################################################################
# 其他系统也是类似的,只不过是下载的目录不同。
# 其他版本的安装可以参考官方文档:https://kubernetes.io/docs/tasks/tools/install-kubectl/#download-as-part-of-the-google-cloud-sdk



第二步、调整配置

如果要访问集群,需要使用 kubeconfig 配置文件,该文件位于 ~/.kube/config(在集群主机上),是集群初始化时创建的(手动复制):



mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config



配置文件 ~/.kube/config 的格式如下(通常使用 kubectl config 命令修改,无需手动编辑):



# touch $HOME/.kube/config
apiVersion: v1
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}

################################################################################
# 配置集群
################################################################################
clusters:
- cluster:
    certificate-authority-data: <ca-data>
    server: https://10.10.50.90:6443
  name: kubernetes

################################################################################
# 配置用户
################################################################################
users:
- name: kubernetes-admin
  user:
    client-certificate-data: <client-cert-data>
    client-key-data: <client-key-data>

################################################################################
# 配置上下文(要使用的用户及要访问的集群)
################################################################################
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes



第三步、验证命令



# 验证配置
kubectl cluster-info
# 如果配置正确,下面的命令将返回URL地址,例如:
# Kubernetes master is running at https://10.10.50.90:6443

# 如果服务器返回 URL 地址,但是决绝连接,则使用下面的命令进行排查,以检查配置文件是否正确:
kubectl cluster-info dump



配置 BASH 自动补全



# 首先,需要安装 bash-complete 包,因为 kubectl 依赖于它。
# 然后,启用 kubectl 补全
apt-get install bash-completion # Debian
yum install bash-completion     # CentOS
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc

# 或者,可以将脚本放入 /etc/bash_completion.d 中
# 当然,这样也需要从新 source 一下。
kubectl completion bash > /etc/bash_completion.d/kubectl
source /etc/bash_completion.d/kubectl

# 第一种方法,这样不用考虑 kubectl 升级的问题,它是动态加载的
# 第二种方法,在 kubectl 升级后,需要重新执行



常用命令

查看与删除 Pod 对象:



kubectl get pods -n "namespace" kubectl delete pods "pod name"



删除资源定义:



kubectl delete -f foo.yaml



删除命名空间内所有 ConfigMap 定义:



kubectl delete configmaps $(kubectl -n default get configmaps --output=jsonpath="{range .items[*]}{.metadata.name}{' '}{end}")



导出命名空间中的 Deployment 定义:



kubectl get -n "namespace" deployment "deployment-name" -o yaml --export



查看 Deployment 信息:



kubectl get deployment kubernet-dashboard -n kube-system



修改 Deployment 镜像:



kubectl set -n "namespace" image "deployment/deploy-foo" "deploy-foo"="image-name"



打开编辑器修改 Deployment 信息:



kubectl edit deployment/myapp-deployment --image=172.20.34.206:5000/myapp:img:3.0
kubectl edit deployment kubernet-dashboard -n kube-system
kubectl patch deployment "deployment-name" -p "{......}"