前言
通过命令操作Kubernetes
对命名空间Namespace的操作
查看命名空间
创建命名空间
<name>
:命名空间名称
1
| kube create namespace <namespace_name>
|
删除命名空间
<namespace_name>
:命名空间名称
1
| kubectl delete namespace <namespace_name>
|
对Pod的操作
pod
可以简写为po
k8s以pod为单位来部署容器
pod为docker容器的封装对象
一个pod可以封装多个docker容器
查看Pod
-o wide
:查看更多信息
--show-labels
:展示标签
查看所有命名空间下的Pod
查看default命名空间下的Pod
查看指定命名空间下的Pod
1
| kubectl get pod -n <namespace_name>
|
查看Pod详细信息
1
| kubectl describe pod <pod_name>
|
查看Pod日志
创建Pod
在default命名空间下创建Pod
<pod_name>
:Pod名
<image_name>:<tag>
:Docker镜像名
1
| kubectl run <pod_name> --image=<image_name>:<tag>
|
在指定命名空间创建Pod
1
| kubectl run <pod_name> --image=<image_name>:<tag> -n <namespace_name>
|
删除Pod
删除default命名空间下的Pod
1
| kubectl delete pod <pod_name>
|
删除多个Pod
1
| kubectl delete pod <pod_name> <pod_name>
|
删除指定命名空间下的Pod
1
| kubectl delete pod <pod_name> -n <namespace_name>
|
删除多个Pod
1
| kubectl delete pod <pod_name_1> <pod_name_2> -n <namespace_name>
|
按标签删除
1
| kubectl delete pod -l <key>=<value>
|
删除当前命名空间的所有pod
进入容器内部
进入default命名空间下的容器内部
1
| kubectl exec -it <pod_name> bash
|
进入指定命名空间下的容器内部
1
| kubectl exec -it <pod_name> bash -n <namespace_name>
|
对Deployment工作负载的操作
deployment
可以简写为deploy
Deployment 是一种更高级的资源,用于部署或升级应用
创建Deployment时,ReplicaSet资源会随之创建,实际Pod是由ReplicaSet创建和管理,而不是由Deployment直接管理
Deployment可以在应用滚动升级过程中,,引入另一个RepliaSet,,并协调两个ReplicaSet
查看Deployment
查看default命名空间的Deployment
查看指定命名空间的Deployment
1
| kubectl get deployment -n <namespace_name>
|
创建Deployment
在default命名空间下创建Deployment
<deployment_name>
:Deployment名称
1
| kubectl create deployment <deployment_name> --image=<image_name>:<tag>
|
在指定命名空间下创建Deployment
1
| kubectl create deployment <deployment_name> --image=<image_name>:<tag> -n <namespace_name>
|
删除Deployment
删除default命名空间下的Deployment
1
| kubectl delete deploy <deployment_name>
|
删除指定命名空间下的Deployment
1
| kubectl delete deploy <deployment_name> -n <namespace_name>
|
修改Deployment属性
添加间隔时间
1
| kubectl patch deploy <deployment_name> -p '{"spec": {"minReadySeconds": 10}}'
|
滚动升级
查看滚动升级的状态
1
| kubectl rollout status deploy <deployment_name>
|
回滚上一个版本
1
| kubectl rollout undo deploy <deployment_name>
|
暂停滚动升级
1
| kubectl rollout pause deploy <deployment_name>
|
继续滚动升级
1
| kubectl rollout resume deploy <deployment_name>
|
对Service服务的操作
查看服务
查看default命名空间的服务
查看指定命名空间的服务
1
| kubectl get service -n <namespace_name>
|
查看服务详细信息
1
| kubectl describe service <service_name>
|
创建服务
暴露端口号给其他容器
<container_name>
:容器名称
--port=80
:配置外部暴露的端口号
--target-port=80
配置转发到容器的端口号
-n <namespace>
:指定命名空间
--type=
:暴露的类型
ClusterIP
:缺省值,内部暴露
NodePort
:外部暴露
1
| kubectl expose deploy <container_name> --port=80 --target-port=80
|
其他容器访问方式
- 其他容器通过IP访问
- 其他容器通过域名访问
- 默认的域名格式为:
Deployment名.命名空间名.service:80
此时查看Service,得到暴露内部的端口号
1 2
| NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 10.1.1.1 80/TCP
|
- 其他容器访问方式
- 其他容器通过IP访问
- 其他容器通过域名访问
- 默认的域名格式为:
Deployment名.命名空间名.service:80
暴露端口号给外部网络
- 这种方式暴露的端口可以通过在统一网段的任意设备访问
-n <namespace>
:指定命名空间
1
| kubectl expose deploy <container_name> --port=80 --target-port=80 --type=NodePort
|
1 2
| NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 10.1.1.1 80:65535/TCP
|
192.168.0.1
:网卡上的真实IP地址
65535
:暴露在外面的端口号
对Labels标签的操作
- 为每个pod贴不同的标签,service根据不同的标签掌管不同的pod
查看Pod时展示标签
1
| kubectl get pod --show-labels
|
只展示指定的标签
1
| kubectl get pod -L <key_1>,<key_2>
|
为指定Pod贴标签
贴单个标签
1
| kubectl label pod <pod_name> <key>=<value>
|
贴多个标签
1
| kubectl label pod <pod_name> <key_1>=<value_1> <key_2>=<value_2>
|
为指定Pod删除标签
<key>-
:根据标签键删除标签
1
| kubectl label pod <pod_name> <key>-
|
为指定Pod修改标签
--overwrite
:修改标签,防止误修改,确认修改而不是添加
1
| kubectl label pod <pod_name> <key>=<value> --overwrite
|
根据标签查询Pod
-l
:查询标签
- 根据标签为
<key>
的pod,查看pod的详细信息,并展示和的标签信息
1
| kubectl get po -l <key> -L <key_1>,<key_2>
|
- 根据标签为
<key>=<value>
的pod,查看pod的详细信息,并展示和的标签信息
1
| kubectl get po -l <key>=<value> -L <key_1>,<key_2>
|
- 根据标签为
<key_1>=<value_1>
并且<key_2>=<value_2>
的pod,查看pod的详细信息,并展示和的标签信息
1
| kubectl get po -l <key_1>=<value_1>,<key_2>=<value_2> -L <key_1>,<key_2>
|
- 根据标签不为
<key>
的pod,查看pod的详细信息,并展示和的标签信息
1
| kubectl get po -l '!<key>' -L <key_1>,<key_2>
|
- 根据标签不为
<key>=<value>
的pod,查看pod的详细信息,并展示和的标签信息
1
| kubectl get po -l '<key>!=<value>' -L <key_1>,<key_2>
|
- 根据标签键
<key>
包含<value_1>
和<value_2>
的pod,查看pod的详细信息,并展示和的标签信息
1
| kubectl get po -l '<key> in (<value_1>,<value_2>)' -L <key_1>,<key_2>
|
- 根据标签键
<key>
不包含<value_1>
和<value_2>
的pod,查看pod的详细信息,并展示和的标签信息
1
| kubectl get po -l '<key> notin (<value_1>,<value_2>)' -L <key_1>,<key_2>
|
对控制器的操作
查看控制器
<controller_type>
:控制器类型
rc
:对RC控制器的操作
rs
:对RS控制器的操作
ds
:对DS控制器的操作
job
:对Job控制器的操作
cj
:对CJ控制器的操作
ns
:对Namespace操作
po
:对容器的操作
all
:对控制器、命名空间、容器同时操作
1
| kubectl get <controller_type>
|
创建控制器
--image=<image>:<tag>
:指定Docker镜像
--port=<port>
:指定对外暴露的端口
--generator=run/v1
:指定api版本
<controller_name>
:控制器名
1
| kubectl run --image=<image>:<tag> --port=<port> --generator=run/v1 <controller_name>
|
删除控制器
--cascade
:不级联删除容器
<fillter_type>
:过滤方式
<name>
:指定操作的对象名
-l <key>=<value>
:指定标签
--all
:没有任何过滤
1
| kubectl delete <controller_type> <fillter_type>
|
删除所有对象
- 删除容器、控制器、服务,不包括pv和pvc
- 这个操作会删除一个系统Service kubernetes,它被删除后会立即被自动重建
1
| kubectl delete all --all
|
对数据卷的操作
持久数据卷(持久卷)
查看持久卷
删除全部持久卷
持久数据卷声明(持久卷声明)
查看持久卷声明
删除全部持久卷声明
1
| kubectl delete pvc --all
|
完成
参考文献
哔哩哔哩——云原生技术架构