一.namespace

        名称空间:就是用来隔离k8s集群的资源的,我们通常使用名称空间对企业业务进行划分;

有的资源是不支持名称空间的,我们称之为全局资源,而支持名称空间的,我们称之为局部资源;

我们可以通过【kubectl api-resources】查看一个资源是否支持名称空间;

        如果删除了名称空间,则对应的名称空间中的资源也会被删除;

        注:相同名称空间下的相同资源,name名称不能重复;

1.查看资源是否支持名称空间

[root@master ~]# kubectl api-resources 

2.查看系统中的名称空间

· 查看系统中的名称空间列表

[root@master ~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   9d
kube-flannel      Active   9d
kube-node-lease   Active   9d
kube-public       Active   9d
kube-system       Active   9d

· 单独查看一个名称空间下的对应资源

[root@master ~]# kubectl get pods -o wide -n kube-flannel
NAME                    READY   STATUS    RESTARTS       AGE   IP           NODE      NOMINATED NODE   READINESS GATES
kube-flannel-ds-54l56   1/1     Running   2 (7d4h ago)   9d    10.0.0.232   worker1   <none>           <none>
kube-flannel-ds-tldbh   1/1     Running   2 (7d4h ago)   9d    10.0.0.233   worker2   <none>           <none>
kube-flannel-ds-vpvgq   1/1     Running   4 (7d6h ago)   9d    10.0.0.231   master    <none>           <none>

3.名称空间的管理

·创建名称空间

1.响应式创建
[root@master ~]# kubectl create namespace demotest
namespace/demotest created
[root@master ~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   9d
demotest          Active   13s
kube-flannel      Active   9d
kube-node-lease   Active   9d
kube-public       Active   9d
kube-system       Active   9d
[root@master ~]# 
2.声明式创建
[root@master namespace]# cat namespace.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: demo01
[root@master namespace]# kubectl apply -f .
namespace/demo01 created
[root@master namespace]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   9d
demo01            Active   16s
demotest          Active   2m58s
kube-flannel      Active   9d
kube-node-lease   Active   9d
kube-public       Active   9d
kube-system       Active   9d

·删除名称空间

[root@master namespace]# kubectl delete namespaces demo01
namespace "demo01" deleted

4.资源引用名称空间

·pod资源引用名称空间

1.编辑pod资源清单
[root@master namespace]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-namespace
  namespace: demo01
spec:
  containers:
  - name: demons
    image: nginx:1.20.1-alpine
2.创建并查看
[root@master namespace]# kubectl apply -f .
namespace/demo01 created
pod/pod-namespace created
[root@master namespace]# kubectl get pods -o wide
No resources found in default namespace.
[root@master namespace]# kubectl get pods -o wide -n demo01
NAME            READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
pod-namespace   1/1     Running   0          27s   10.100.1.38   worker1   <none>           <none>

·configMap资源引用名称空间

1.编辑configmap资源清单
[root@master namespace]# cat 01-cm.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm01
  namespace: demo01
data:
  demoo: "aaaaaa"
  "study": "k8s"
  test: |
    a=a
    b=b
2. 创建configmap资源
[root@master namespace]# kubectl apply -f 01-cm.yaml 
configmap/cm01 created
3.查看名称空间下的cm资源
[root@master namespace]# kubectl get cm 
NAME               DATA   AGE
kube-root-ca.crt   1      145m
[root@master namespace]# kubectl get cm -n demo01
NAME               DATA   AGE
cm01               3      16s
kube-root-ca.crt   1      5m32s

二.探针

概述:

        探针是一种健康检查机制,用于监测Pod内容器的运行状况

1.探针的种类

·livenessProbe

健康状态检查探针:livenessProbe

        当我们设置了这个探针之后,检查不通过,pod容器就会重启,周期性检查服务是否存在;

        - 检查若失败,将“重启容器”,本质上就是删除原来的容器,重新创建;

        - 若不设置健康检查探针,默认就是成功的,检查成功;

·readinessProbe

可用性检查探针:readinessProbe

        当我们设置这个探针之后,检查不通过,pod容器不会重启,周期性检查服务是否可用,从而判断容器是否准备就绪;

        - 若检查服务不可用,就是检查失败,则会将pod从service的endppints列表中移除;

        - 若检查可用,则会将pod重新添加会secvice的endppints列表中;

        - 若不设置这个探针,则默认是检查成功状态;

·startupProbe

启动探针:startupProbe

        从k8s的1.16版本之后才新加的功能,1.16版本之前没有这个探针;

        - 如果设置了这个探针,则其他所有探针都会被禁用,指导这个探针检查成功为止;

        - 如果检查失败,kubelet会杀死容器,而容器依照我们的重启策略进行重启;

        - 如果没有设置这个探针,默认是成功状态

2.探针使用的检查方法

·命令检查:exec

        就是执行一段命令,根据返回的结果判断是否成功,返回0或者非0(类似shell中echo $?)

·http请求检查:httpGet

        根据返回的状态码,判断是否正常;

·端口检查:tcpSocket

        测试某个TCP端口是否能够链接,类似于telnet,nc等网络工具;

·grpc:(了解即可)

3.livenessProbe健康检查探针

·exec方式

1.当命令正确时
[root@master probe]# cat 01-probe.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: demo-livenessprobe
spec:
  containers:
  - name: demoo
    image: nginx:1.20.1-alpine
    #声明健康检查探针livenessProbe
    livenessProbe:
      #使用exec方式做检查;
      exec:
        #自定义检查命令
        command:
        - cat
        - /etc/hosts
      #检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
      failureThreshold: 3
      #容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
      initialDelaySeconds: 15
      #探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
      periodSeconds: 1
      #检查成功几次算【存活】,默认1,最小值1
      successThreshold: 1
      #一次检查超时时间,默认1(秒),最小值1(秒)
      timeoutSeconds: 1
 [root@master probe]# kubectl get pods
NAME                 READY   STATUS    RESTARTS     AGE
demo-livenessprobe   1/1     Running   1 (2s ago)   10s
2.当命令错误时

故意写错命令测试

[root@master probe]# cat 01-probe.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: demo-livenessprobe
spec:
  containers:
  - name: demoo
    image: nginx:1.20.1-alpine
    #声明健康检查探针livenessProbe
    livenessProbe:
      #使用exec方式做检查;
      exec:
        #自定义检查命令
        command:
        - catt
        - /etc/hosts
      #检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
      failureThreshold: 3
      #容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
      initialDelaySeconds: 15
      #探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
      periodSeconds: 1
      #检查成功几次算【存活】,默认1,最小值1
      successThreshold: 1
      #一次检查超时时间,默认1(秒),最小值1(秒)
      timeoutSeconds: 1
[root@master probe]# kubectl get pods
NAME                 READY   STATUS             RESTARTS       AGE
demo-livenessprobe   0/1     CrashLoopBackOff   9 (3m8s ago)   14m

·httpGet检查方式

1.端口正确

检查成功一次即存活

[root@master probe]# cat 01-probe.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: demo-livenessprobe
spec:
  containers:
  - name: demoo
    image: nginx:1.20.1-alpine
    #声明健康检查探针livenessProbe
    livenessProbe:
      #使用httpGet方式做检查;
      httpGet:
        #检查那个端口,通过哪个端口访问页面?
        port: 80
        #指定探测的页面路径
        path: /usr/share/nginx/html/index.html
      #检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
      failureThreshold: 3
      #容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
      initialDelaySeconds: 15
      #探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
      periodSeconds: 1
      #检查成功几次算【存活】,默认1,最小值1
      successThreshold: 1
      #一次检查超时时间,默认1(秒),最小值1(秒)
      timeoutSeconds: 1
2.端口错误

检查失败三次即不存活

[root@master probe]# cat 01-probe.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: demo-livenessprobe
spec:
  containers:
  - name: demoo
    image: nginx:1.20.1-alpine
    #声明健康检查探针livenessProbe
    livenessProbe:
      #使用httpGet方式做检查;
      httpGet:
        #检查那个端口,通过哪个端口访问页面?
        port: 88
        #指定探测的页面路径
        path: /usr/share/nginx/html/index.html
      #检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
      failureThreshold: 3
      #容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
      initialDelaySeconds: 15
      #探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
      periodSeconds: 1
      #检查成功几次算【存活】,默认1,最小值1
      successThreshold: 1
      #一次检查超时时间,默认1(秒),最小值1(秒)
      timeoutSeconds: 1
[root@master probe]# kubectl get pods
NAME                 READY   STATUS    RESTARTS      AGE
demo-livenessprobe   1/1     Running   3 (18s ago)   70s
[root@master probe]# kubectl get pods
NAME                 READY   STATUS             RESTARTS     AGE
demo-livenessprobe   0/1     CrashLoopBackOff   3 (4s ago)   73s

·tcpSocket检测方式

端口正确

检查成功一次即存活

[root@master probe]# cat 01-probe.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: demo-livenessprobe
spec:
  containers:
  - name: demoo
    image: nginx:1.20.1-alpine
    #声明健康检查探针livenessProbe
    livenessProbe:
      #使用tcpSocket方式做检查;
      tcpSocket:
        #检查哪一个端口
        port: 80
      #检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
      failureThreshold: 3
      #容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
      initialDelaySeconds: 15
      #探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
      periodSeconds: 1
      #检查成功几次算【存活】,默认1,最小值1
      successThreshold: 1
      #一次检查超时时间,默认1(秒),最小值1(秒)
      timeoutSeconds: 1
[root@master probe]# kubectl get pods
NAME                 READY   STATUS    RESTARTS   AGE
demo-livenessprobe   1/1     Running   0          52s

4.readinessProbe可用性检查

[root@master probe]# cat 01-probe.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: demo-livenessprobe
spec:
  containers:
  - name: demoo
    image: nginx:1.20.1-alpine
    #声明健康检查探针readinessProbe
    readinessProbe:
      #使用tcpSocket方式做检查;
      tcpSocket:
        #检查哪一个端口
        port: 80
      #检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
      failureThreshold: 3
      #容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
      initialDelaySeconds: 15
      #探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
      periodSeconds: 1
      #检查成功几次算【存活】,默认1,最小值1
      successThreshold: 1
      #一次检查超时时间,默认1(秒),最小值1(秒)
      timeoutSeconds: 1

5.startupProbe启动检查

[root@master probe]# cat 01-probe.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: demo-livenessprobe
spec:
  containers:
  - name: demoo
    image: nginx:1.20.1-alpine
    #声明启动探针startupProbe
    startupProbe:
      #使用tcpSocket方式做检查;
      tcpSocket:
        #检查哪一个端口
        port: 80
      #检查失败几次算【不存活】,默认值是3,最小值是1,检查成功后,值会重置重1开始数;
      failureThreshold: 3
      #容器启动后多久开始进行健康检查,即此时间段内,检测到服务失败并不计数;默认1,最小值1
      initialDelaySeconds: 15
      #探针检测频率,多久检测一次,默认10(秒),最小值1(秒)
      periodSeconds: 1
      #检查成功几次算【存活】,默认1,最小值1
      successThreshold: 1
      #一次检查超时时间,默认1(秒),最小值1(秒)
      timeoutSeconds: 1

6.三个探针一起使用

[root@master probe]# cat 01-probe.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: demo-livenessprobe
spec:
  containers:
  - name: demoo
    image: nginx:1.20.1-alpine
    #声明启动探针startupProbe
    startupProbe:
      tcpSocket:
        port: 80
      failureThreshold: 3
      initialDelaySeconds: 15
      periodSeconds: 1
      successThreshold: 1
      timeoutSeconds: 1
    #声明启动探针livenessProbe
    livenessProbe:
      tcpSocket:
        port: 80
      failureThreshold: 3
      initialDelaySeconds: 15
      periodSeconds: 1
      successThreshold: 1
      timeoutSeconds: 1
    #声明启动探针readinessProbe
    readinessProbe:
      tcpSocket:
        port: 80
      failureThreshold: 3
      initialDelaySeconds: 15
      periodSeconds: 1
      successThreshold: 1
      timeoutSeconds: 1

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐