0%

kubectl命令——配置篇

kubectl简介

Kubectl is a command line interface for running commands against Kubernetes clusters.

没错,kubectl是一个命令行工具,用来控制K8S集群。kubectl该怎么读?可以参考HowToPronounce-kubectl,郝同学喜欢读作kubecontrol。

kubectl命令格式为:

1
kubectl [command] [TYPE] [NAME] [flags]

更多内容,参考:

《K8S入门篇》一文中,已经学习了kubectl的安装方法,并且使用了一些简单命令。本文学习kubectl的配置方法和配置技巧。

获取kubeconfig

要想正常使用kubectl命令,首先要拿到用户认证配置信息(kubeconfig)。

kubeconfig获取方式:

  • 使用kubeadm安装的K8S集群,默认的kubeconfig配置文件路径为 /etc/kubernetes/admin.conf
  • 使用minikube安装的K8S集群,默认的kubeconfig配置文件路径为 ${HOME}/.kube/config
  • 用户默认使用的kubeconfig配置文件路径为 ${HOME}/.kube/config
  • 阿里云/腾讯云等云平台提供的K8S集群,从集群管理页面上获取kubeconfig配置,保存为 ${HOME}/.kube/config 即可

指定配置文件

如果有多个集群的多个kubeconfig配置文件,那么我们可能需要指定一个配置文件。

指定默认配置文件

1
export KUBECONFIG=~/.kube/config

查看kubeconfig配置内容

1
kubectl config view

指定配置文件和context

1
kubectl config --kubeconfig=/root/vk-kube-config use-context voidking@kubenertes

指定单次命令的配置文件

1
kubectl get deployments --kubeconfig=/root/.kube/config

指定默认的namespace

1
2
kubectl config set-context --current --namespace=voidking
kubectl config set-context $(kubectl config current-context) --namespace=voidking

配置整合

同时使用多个配置

1
export KUBECONFIG=~/.kube/config:~/Download/new-config

要保证多个config的cluster name、user name、context name不同,否则无法区分它们,会造成配置混乱。
如果多个config的cluster name、user name、context name相同,可以自行修改一下,改成不同的name,修改name不会影响对集群的操作。

多个配置整合成一个配置

1
2
KUBECONFIG=~/.kube/config:~/Downloads/new-config kubectl config view --merge --flatten > ~/.kube/newconfig
export KUBECONFIG=~/.kube/newconfig

查看和使用配置

1
2
kubectl config get-contexts
kubectl config use-context voidking@kubenertes

删除某个集群配置

1
2
3
kubectl config delete-context xxx
kubectl config delete-user xxx
kubectl config delete-cluster xxx

配置整合2.0

多个kubeconfig合并成一个kubeconfig后,可以通过kubectl config实现在多个k8s集群间切换,很方便。

但是,因为很多集群的cluster name、user name、context name是相同的,所以每当有新的k8s集群加入时,或者kubeconfig过期需要重新加入时,我们都需要修改对新的config中的name进行修改,也是比较麻烦。

这里提供另外一种配置整合的方法:config文件改为软链,软链到真实config,通过修改软链切换配置。

1、准备真实config

1
2
3
4
mkdir -p ~/.kubeconfig/dev/
mkdir -p ~/.kubeconfig/test/
vim ~/.kubeconfig/dev/config
vim ~/.kubeconfig/test/config

2、准备修改软链脚本 change-kubeconfig.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
CLUSTER=$1
if [[ -z "$CLUSTER" ]];then
config_path=$(ls -l $HOME/.kube/config | awk '{print $NF}')
echo "Current kubeconfig is $config_path"
echo "You can specify a cluster to change the kubeconfig!"
exit 1
fi

if [[ ! -e "$HOME/.kubeconfig/$CLUSTER/config" ]];then
echo "Config file $HOME/.kubeconfig/$CLUSTER/config does not exist!"
exit 1
fi

ln -sf $HOME/.kubeconfig/$CLUSTER/config $HOME/.kube/config
echo "Kubeconfig has changed to $HOME/.kubeconfig/$CLUSTER/config"

3、脚本配置

1
2
3
4
5
6
7
8
chmod a+x change-kubeconfig.sh
mkdir $HOME/.scripts
mv change-kubeconfig.sh $HOME/.scripts

cat <<EOF | tee -a $HOME/.bash_profile
# kubeconfig script
alias changek="\$HOME/.scripts/change-kubeconfig.sh"
EOF

4、使用脚本

1
2
3
4
5
source .bash_profile
changek dev
kubectl get nodes
changek test
kubectl get nodes

命令自动补全

linux系统配置

1
2
3
4
5
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source /usr/share/bash-completion/bash_completion" >> ~/.bash_profile
echo "source <(kubectl completion bash)" >> ~/.bash_profile

配置后,输入kubectl get s后,两次按下tab键,会提示可以选择的资源。
输入kubectl get sec后,按下tab键,会自动补全命令。

mac系统配置

1
2
3
brew install bash-completion
source <(kubectl completion zsh)
echo "source <(kubectl completion zsh)" >> ~/.bash_profile

快捷命令

kubectl缩写为k

1
2
3
which kubectl
alias k="/usr/local/bin/kubectl"
complete -F __start_kubectl k

建议把配置写入 .bash_profile ,登录shell后别名自动生效。

命令合并

1
2
alias kg="kubectl get"
alisa kd="kubectl describe"

kubectl get合并为kg,kubectl describe合并为kd。

  • 本文作者: 好好学习的郝
  • 本文链接: https://www.voidking.com/dev-kubectl-config/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!源站会及时更新知识点及修正错误,阅读体验也更好。欢迎分享,欢迎收藏~