认识
官网:https://kubernetes.io/docs/tasks/tools/#kubectl
文档:https://kubernetes.io/docs/reference/kubectl/
仓库:https://github.com/kubernetes/kubectl
kubectl 是 Kubernetes 集群管理命令,用于管理 Kubernetes 集群,完成集群维护任务。在使用集群时,我们有很多能用的管理工具。但是,深入的集群管理与问题排查还是需要使用 kubectl 命令,而非那些高级图形化平台。简而言之,kubectl,其为操作 Kubernetes 的命令行工具。
组成
配置文件
kubectl 在 $HOME/.kube/ 中查找名为 config 的文件,该文件被称为 kubeconfig 文件。
或,通过设置 KUBECONFIG 环境变量,或,通过设置 –kubeconfig 标志,来指定其他 kubeconfig 文件。
性质
kubectl apply vs. kubectl create
Kubectl Apply vs. Kubectl Create – What’s the Difference?
Imperative management means giving a series of instructions or steps to reach the goal. We specify what and how we should reach the goal.
Declarative management is where we specify the required outcome, not the individual steps needed to achieve that outcome.
kubectl patch | 修改 YAML 内容
templates – How to set dynamic values with Kubernetes yaml file – Stack Overflow
kubernetes – How can I edit a Deployment without modify the file manually? – Stack Overflow
envsubst | 需要预先在 YAML中定义 ${XXX} 变量
kubectl patch deployment myapp-deployment -p \
'{"spec":{"template":{"spec":{"containers":[{"name":"myapp","image":"172.20.34.206:5000/myapp:img:3.0"}]}}}}'
kubectl replace | 替换对象
https://kubernetes.io/docs/reference/kubectl/generated/kubectl_replace/
发布 Rollout 历史 History
kubectl rollout history deployment/<DEPLOYMENT_NAME> -n <NAMESPACE>
kubectl rollout history deployment/<DEPLOYMENT_NAME> –revision=<REVISION_NUMBER> -n <NAMESPACE>
查看资源使用 | top node | top pods
https://kubernetes.io/docs/reference/kubectl/generated/kubectl_top/
https://kubernetes.io/docs/reference/kubectl/generated/kubectl_top/kubectl_top_pod/
https://kubernetes.io/docs/reference/kubectl/generated/kubectl_top/kubectl_top_node/
输出格式
WIP
Plugin | 扩展 kubectl 命令 | 安装 kubectl 插件
除了我们常用的 kubectl get、kubectl delete、kubectl describe 子命令之外,kubectl 还支持某些特殊的子命令。比如 kubectl cert-manager、kubectl ingress 等等特殊子命令,用于完成特定的集群维护任务。但是,这些子命令需要安装插件,然后才能够使用。比如 kubectl cert-manager 子命令,需要安装 kubectl-cert_manager 插件。该笔记将记录:在 Kubernetes 中,如何为 kubectl 安装插件,扩展 kubectl 命令的方法,相关问题的处理方法。
针对插件的开发:参考 Extend kubectl with plugins 插件,获取插件开发方法。
针对插件的安装:针对具体插件,其文档通常都会介绍自身的安装方法,所以我们不再详细介绍该方法。
插件的安装方法有两种:通过手动安装;通过 krew 安装;鉴于网络环境受限,很难说哪种插件管理方法更便捷。
Bash Completion | 提供 Bash 补全
参考 Tools Included 文档,以获取对于其他操作系统和 Shell 补全的方法;
for Linux
# 根据文档,kubectl 依赖于 bash-complete,所以要先安装该程序包; yum install -y bash-completion # CentOS apt-get install bash-completion # Debian # 然后,启用 kubectl 补全 echo "source <($(which kubectl) completion bash)" >> ~/.bashrc source ~/.bashrc
for Windows
Fix for PowerShell Script cannot be loaded because running scripts is disabled on this system error
Install and Set Up kubectl on Windows | Kubernetes
# PowerShell Run as Administrator # 检查:$PROFILE C:\Users\<Username>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 # 添加配置 Set-ExecutionPolicy RemoteSigned kubectl completion powershell >> $PROFILE
构建
—— 安装 kubectl 命令、安装命令
版本选择
根据官网文档,“kubelet 命令的次版本号”与“集群的次版本号”最大仅能差一。比如 kubectl v1.2 能够正常操作版本 Kubernetes v1.1、v1.2、v1.3 的集群,以防止出现某些意料之外的情况;
服务安装
Install Tools/kubectl | https://kubernetes.io/docs/tasks/tools/#kubectl
容器镜像 | https://hub.docker.com/r/bitnami/kubectl
docker.io/bitnami/kubectl:1.30
ccr.ccs.tencentyun.com/d3rm-3rd/docker.io_bitnami_kubectl:1.30
验证命令
# 验证配置 # 如果配置正确,命令将返回 URL 地址,例如:Kubernetes master is running at https://10.10.50.90:6443 kubectl cluster-info # 如果服务器返回 URL 地址,但是拒绝连接,则使用下面的命令进行排查,以检查配置文件是否正确: kubectl cluster-info dump
通过仓库安装,在部署时安装,……
注意事项,通常在集群部署时我们会完成 kubectl 命令的安装,因此很少独立安装。除非需要应对某些场景,比如远程管理集群;
但是其是 Google 源无法访问,我们使用阿里云镜像仓库:
# ----------------------------------------------------------------------------- # Debian/Ubuntu # 尽管下载 apt-key.gpg 存在困难,但是应该尽量从官方站点下载(请勿随意使用第三方密钥) # curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FEEA9169307EA071 8B57C5C2836F4BEB B53DC80D13EDEF05 cat > /etc/apt/sources.list.d/kubernetes.list <<EOF deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF apt-get update && apt-cache madison kubectl apt-get install kubectl=1.22.15-00 # ----------------------------------------------------------------------------- # CentOS 7.4 cat > /etc/yum.repos.d/kubernetes-ali.repo <<EOF [kubernetes-ali] name=Kubernetes ALi baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 EOF yum install -y kubectl-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 # ----------------------------------------------------------------------------- # 下载特定版本 # curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/linux/amd64/kubectl # curl -LO https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl curl -LO https://dl.k8s.io/release/v1.24.14/bin/linux/amd64/kubectl # 安装命令 chmod +x ./kubectl mv ./kubectl /usr/local/bin/kubectl # 检查安装版本 kubectl version --client
针对其他平台,安装也是类似的,参考 Install Tools | Kubernetes 文档
kubernetes/CHANGELOG | https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG
该仓库的 Changelog 包含相关资源的下载地址。在 Jenkins CI 中,我们需要 .tar.gz 来完成安装。
with asdf
asdf plugin-list-all | grep kubectl asdf plugin-add kubectl asdf list all kubectl asdf install kubectl 1.30.8 asdf global kubectl 1.30.8
应用
该笔记将记录:在 Linux 中,如何安装 kubectl 命令,以及常用命令、配置、使用方法,以及相关问题处理。
改进
WIP
参考
Install and Set Up kubectl
Overview of kubectl
Kubernetes/Reference/kubectl