问题描述
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 "{......}"