配置 Kubectl
命令行工具需要配置 K8s 集群的连接及认证信息,才能与之交互。
kubectl 本身默认设置了配置文件的路径: $HOME/.kube/config ,所以应该将配置文件放置在路径
配置集群连接及认证信息
在初始化集群的 master 节点上
cp /etc/kubernetes/admin.conf ~/.kube/configkubectl config get-contextskubectl get nodes
在其他节点上
如果你想运行 kubectl 的节点在 K8s 集群外部(跳板机,个人工作笔记本),需要把配置文件从master节点上下载放在该节点上
scp root@<master ip>:/etc/kubernetes/admin.conf ~/.kube/configkubectl config get-contextskubectl get nodes# 如果 kubeconfig 文件没有放在默认路径下,也可以通过参数指定kubectl --kubeconfig ~/.kube/config config get-contextskubectl --kubeconfig ~/.kube/config get nodes
kubectl 命令行补全
# 直接生效source <(kubectl completion bash)# 下次登录时自动运行补全命令cat << 'EOF' | tee -a ~/.profile# kubectl completionif command -v kubectl; thensource <(kubectl completion bash)fiEOF
切换默认的命名空间
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
