kubectl命令解释
kubectl [command] [type] [name] [flags]
**comand**:指定要对资源执行的操作,例如create、get、delete
**type**:指定资源类型,比如deployment、pod、service
**name**:指定资源的名称,名称大小写敏感
**flags**:指定额外的可选参数
输出示例
#进入POD里面输入 pod名称 和 命名空间名称
kubectl exec -it 【pod_name】 -n 【dev】 /bin/bash
#查看pod日志 pod名称 和 命名空间名称
kubectl logs 【pod_name】 -n 【dev】
# 查看所有pod
kubectl get pod -n dev
# 查看某个pod
kubectl get pod pod-name -n dev
# 查看某个pod,以yaml格式展示结果
kubectl get pod pod-name -o yaml
命令式操作:namespace/pod的创建和删除
命名空间namespace简写ns:相当于是一个小房间,与其他空间进行隔离
-n 代表指定空间
#查看namespce
[root@k8s-master ~]# kubectl get ns
#创建namespce
[root@k8s-master ~]# kubectl create ns dev
#在dev空间下创建指定nginx版本
[root@k8s-master ~]# kubectl run pod --image=nginx:1.17.1 -n dev
#查看dev空间下创建的nginx-pod
[root@k8s-master ~]# kubectl get pod -n dev
#删除dev下面的pod
[root@k8s-master ~]# kubectl delete pod pod-cbb995bbf-729tp -n dev
#删除dev命名空间
[root@k8s-master ~]# kubectl delete ns dev
命令+yaml操作:namespace/pod的创建和删除
说明:指定namespace空间名为dev,指定pod名为nginxpod,在空间dev下,指定容器名称和镜像版本
#创建一个nginxpod.yaml文件
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: v1
kind: Pod
metadata:
name: nginxpod
namespace: dev
spec:
containers:
- name: nginx-containers
image: nginx:latest
#创建
[root@k8s-master ~]# kubectl create -f nginxpod.yaml
#查看
[root@k8s-master ~]# kubectl get -f nginxpod.yaml
#删除
[root@k8s-master ~]# kubectl delete -f nginxpod.yaml
命令apply+yaml操作:namespace/pod创建
kubectl apply -f nginxpod.yaml
如果资源不存在,就创建,相当于 kubectl create
如果资源已存在,就更新,相当于 kubectl patch
扩展:kubectl如果想要在node节点上运行,需要把 ~/.kube 目录下的文件都拷贝到节点上
[root@k8s-master ~]# ls ~/.kube
[root@k8s-master ~]# scp -r ~/.kube node01:~/
namespace简称ns
主要作用是实现多套环境的资源隔离或者多租户的资源隔离
#查看所有命名空间
[root@k8s-master ~]# kubectl get ns
#创建dev空间
[root@k8s-master ~]# kubectl create ns dev
#查看dev空间
[root@k8s-master ~]# kubectl get ns dev
#删除dev空间
[root@k8s-master ~]# kubectl delete ns dev
#查看ns详情 命令:kubectl describe ns ns名称
[root@master ~]# kubectl describe ns default
Name: default
Labels: <none>
Annotations: <none>
Status: Active # Active 命名空间正在使用中 Terminating 正在删除命名空间
# ResourceQuota 针对namespace做的资源限制
# LimitRange针对namespace中的每个组件做的资源限制
No resource quota.
No LimitRange resource.
yaml配置方式
apiVersion: v1
kind: Namespace
metadata:
name: dev
Pod
Pod是k8s集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。
# 创建并运行
# 命令格式: kubectl run (pod控制器名称) [参数]
# --image 指定Pod的镜像
# --port 指定端口
# --namespace 指定namespace
kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace=dev
#查看pod信息
kubectl get pod -n dev
#查看pod运行的节点IP等信息
kubectl get pod -n dev -o wide
#查看pod运行日志
kubectl logs nginx -n dev
#用describe分析pod启动相关信息
kubectl describe pod nginx -n dev
#查看dev空间下的deploy名称
kubectl get deploy -n dev
#删除dev空间下nginx1的deploy,对应的pod就被删除了
kubectl delete deploy nginx1 -n dev
yaml配置方式
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
spec:
containers:
- image: nginx:latest
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
Lable
Label作用就是在资源上添加标识,用来对它们进行区分和选择。
标签需要 key=value
#查看dev空间下的pod标签
kubectl get pod -n dev --show-labels
#添加标签为 version=1.0
kubectl label pod nginx -n dev version=1.0
#更新标签 version=2.0
kubectl label pod nginx -n dev version=2.0 --overwrite
#筛选标签等于 version=2.0 的
kubectl get pod -n dev -l version=2.0 --show-labels
#删除标签 version
kubectl label pod nginx -n dev version-
yaml配置方式
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
labels:
version: "3.0"
env: "test"
spec:
containers:
- image: nginx:latest
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
Deployment简称deploy
k8s中Pod控制器的种类有很多,Deployment是其中一种
# 命令格式: kubectl create deployment名称 [参数]
# --image 指定pod的镜像
# --port 指定端口
# --replicas 指定创建pod数量
# --namespace 指定namespace
# 创建一个deploy名字为nginx 镜像是nginx:latest 端口80 pod副本数replicas=3 空间dev
kubectl run nginx --image=nginx:latest --port=80 --replicas=3 -n dev
#查看deploy,pod
kubectl get deploy,pod -n dev
#查看deploy详细信息
kubectl describe deploy nginx -n dev
#删除delpoy后,下面的pod也都会删除
kubectl delete deploy nginx -n dev
yaml配置方式
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- image: nginx:latest
name: nginx
ports:
- containerPort: 80
protocol: TCP
Service简称svc
Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。
#创建svc集群内网访问 --type=ClusterIP
#暴露svc 暴露deploy名称是:nginx的 svc名称设置为:svc-nginx1 类型是:ClusterIP 端口:80 目标端口:80
kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
#创建svc集群外网访问 --type=NodePort
kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev
#查看vc
kubectl get svc -n dev
#删除svc
kubectl delete svc svc-nginx1 -n dev
yaml配置方式
apiVersion: v1
kind: Service
metadata:
name: svc-nginx
namespace: dev
spec:
clusterIP: 10.109.179.232 #固定svc的内网ip
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: ClusterIP
镜像拉取说明
创建pod-imagepullpolicy.yaml文件
apiVersion: v1
kind: Pod
metadata:
name: pod-imagepullpolicy
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
imagePullPolicy: Never # 用于设置镜像拉取策略
- name: busybox
image: busybox:1.30
imagePullPolicy,用于设置镜像拉取策略,kubernetes支持配置三种拉取策略:
- Always:总是从远程仓库拉取镜像(一直远程下载)
- IfNotPresent:本地有则使用本地镜像,本地没有则从远程仓库拉取镜像(本地有就本地 本地没远程下载)
- Never:只使用本地镜像,从不去远程仓库拉取,本地没有就报错 (一直使用本地)
默认值说明:
如果镜像tag为具体版本号, 默认策略是:IfNotPresent
如果镜像tag为:latest(最终版本) ,默认策略是always
进入kubectl的pod下面的容器命令
# 命令: kubectl exec pod名称 -n 命名空间 -it -c 容器名称 /bin/sh
# 使用这个命令就可以进入某个容器的内部,然后进行相关操作了
[root@k8s-master01 pod]# kubectl exec pod-busybox -n dev -it -c busybox /bin/sh