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

kubernetes根据标签查询pod列表 kubectl get pod -n_kubernetes

#删除dev下面的pod
[root@k8s-master ~]# kubectl delete pod pod-cbb995bbf-729tp -n dev
#删除dev命名空间
[root@k8s-master ~]# kubectl delete ns dev

kubernetes根据标签查询pod列表 kubectl get pod -n_Pod_02

命令+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

kubernetes根据标签查询pod列表 kubectl get pod -n_docker_03

命令apply+yaml操作:namespace/pod创建

kubectl apply -f nginxpod.yaml

如果资源不存在,就创建,相当于 kubectl create

如果资源已存在,就更新,相当于 kubectl patch

kubernetes根据标签查询pod列表 kubectl get pod -n_linux_04

扩展:kubectl如果想要在node节点上运行,需要把 ~/.kube 目录下的文件都拷贝到节点上
[root@k8s-master ~]# ls ~/.kube
[root@k8s-master ~]# scp -r ~/.kube node01:~/

kubernetes根据标签查询pod列表 kubectl get pod -n_docker_05

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