kubectl是k8s集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署,kubectl命令的语法如下:
kubectl [command] [type] [name] [flags]
comand:指定要对资源执行的操作,例如create、get、delete
type:指定资源类型,比如deployment、pod、service
name:指定资源的名称,名称大小写敏感
flags:指定额外的可选参数
kubectl的命令可分为三类:
kubectl --help
语法:
kubectl create ns/namespace namespace名称
实例:
kubectl create ns bubble-dev
kubectl create namespace bubble-dev
语法:
kubectl get ns/namespace
实例:
kubectl get ns
kubectl get namespace
语法:
kubectl run pod --image=镜像名称 -n namespace名称
实例:
kubectl run pod --image=nginx -n bubble-dev
语法:
kubectl get pods -n namespace名称
实例:
kubectl get pods -n bubble-dev
如果不使用-n指定namespace,则会查询默认namespace(default)下的pod
语法:
kubectl describe pod pod名称 -n namespace名称
实例:
kubectl describe pod pod-864f9875b9-kwbj2 -n bubble-dev
语法:
kubectl delete pods pod名称 -n namespace名称
实例:
kubectl delete pods pod-864f9875b9-kwbj2 -n bubble-dev
但是使用kubectl delete pods命令删除pod,之后又会重新启动一个新的pod
此时pod的名称也已经发生了变化,如果想要完全删除掉一个pod,需要删除掉这个pod的deployment或者整个namespace
语法:
kubectl delete namespace/ns namespace名称
实例:
kubectl delete namespace bubble-dev
kubectl delete ns bubble-dev
此时namespace以及namespace下运行的所有pod都被删除掉了
命令式对象配置就是使用命令配合配置文件一起来操作kubernetes资源。
自定义yaml文件名称:nginx-pod.yaml
vi nginx-pod.yaml
apiVersion: v1
kind: Namespace
metadata:
name: bubble-dev # 指定Namespace空间名称
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod # 指定pod的名称
namespace: bubble-dev # 指定该pod对应的Namespace
spec:
containers:
- name: nginx-container # 运行一个nginx容器
image: nginx:1.17.9 # 指定镜像的名称
kubectl create -f nginx-pod.yaml
kubectl get -f nginx-pod.yaml
kubectl delete -f nginx-pod.yaml
声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。
其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
使用apply操作资源:
如果资源不存在,就创建,相当于 kubectl create
如果资源已存在,就更新,相当于 kubectl patch
kubectl apply -f nginx-pod.yaml
将yaml文件中Nginx的版本从1.17.9改成1.17.8,再执行命令
从运行结果可知,此时pod是发生了变化的
kubectl describe pod nginx-pod -n bubble-dev
总结:三种方式应该怎么用?
kubectl create ns bubble-dev
kubectl run nginx --image=nginx:1.17.9 --port=80 -n=bubble-dev
kubectl get pods -n=bubble-dev
查看Pod的yaml文件(-o yaml:以yaml的格式显示出来)
kubectl get pods -n bubble-dev nginx-5c9b49c46-49wxm -o yaml
kubectl get pods nginx-5c9b49c46-49wxm -n bubble-dev -o yaml
查看yaml配置清单相关属性信息
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod # 指定pod的名称
namespace: bubble-dev # 指定该pod对应的Namespace
spec:
containers:
- name: nginx-container # 运行一个nginx容器
image: nginx:1.17.9 # 指定镜像的名称
kubectl explain pod --- 查看一级属性
kubectl explain pod.metadata --- 查看二级属性
kubectl explain pod.metadata.namespace --- 查看三级属性