【K8S实战】-超详细教程(一)

【K8S实战】-超详细教程(一)

1、环境准备

K8S环境搭建可以看这篇文章【k8s搭建(超详细,保姆级教程)】,这里就不过多赘述了,有疑问欢迎留言。

2、K8S资源创建

K8S的资源创建一般有2种:

3、Namespace(命名空间)

主要用于资源访问的隔离。

3.1、命令操作Namespace

使用命令方式实现对命名空的创建与删除。

查看当前k8s的所有命名空间
[root@k8s-m ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   4d
kube-node-lease   Active   4d
kube-public       Active   4d
kube-system       Active   4d

创建命名空间,namespace可使用缩写的ns代替
[root@k8s-m ~]# kubectl create namespace test-ns
namespace/test-ns created
[root@k8s-m ~]# 

再次查看我们创建的命名空间,发现我们已经成功创建test-ns
[root@k8s-m ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   4d
kube-node-lease   Active   4d
kube-public       Active   4d
kube-system       Active   4d
test-ns           Active   95s
[root@k8s-m ~]# 

删除命名空间
[root@k8s-m ~]# kubectl delete ns test-ns
namespace "test-ns" deleted
[root@k8s-m ~]# 

再次查看发现命名空间已被删除
[root@k8s-m ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   4d
kube-node-lease   Active   4d
kube-public       Active   4d
kube-system       Active   4d
[root@k8s-m ~]# 

3.2、使用Yaml操作Namespace

创建一个名为ns.yaml的文件,文件内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: test-ns

使用Yaml方式对命名空进行创建与删除。

创建操作kubectl apply -f xxx.yaml意思是使用xxx.yaml文件创建资源,
可以使用kubectl --help查看一级说明,kubectl apply --help二级说明
[root@k8s-m ns]# kubectl apply -f ns.yaml #意思使用ns.yaml创建资源
namespace/test-ns created
[root@k8s-m ns]# 

删除操作
[root@k8s-m ns]# kubectl delete -f ns.yaml 
namespace "test-ns" deleted
[root@k8s-m ns]# 

4、pod

pod是K8S运行的最小单位。可以理解类似Docker的最小运行单位容器,只不过K8S是在Docker容器的基础上再封装一层,也就是说一个pod可以运行一个或多个容器(后面我会实验)。

4.1、命令操作pod

接下来实践下命令对pod进行操作,这里我们使用nginx进行实践。

查看当前运行的pod
[root@k8s-m ns]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
kube-system   calico-kube-controllers-6d9cdcd744-4vb6b   1/1     Running   1          4d      192.168.29.6     k8s-m    <none>           <none>
kube-system   calico-node-rpbwg                          1/1     Running   1          4d      200.168.88.130   k8s-m    <none>           <none>
kube-system   calico-node-t96v2                          1/1     Running   1          4d      200.168.88.132   k8s-n1   <none>           <none>
kube-system   coredns-5897cd56c4-55v75                   1/1     Running   1          4d      192.168.29.4     k8s-m    <none>           <none>
kube-system   coredns-5897cd56c4-tf8cb                   1/1     Running   1          4d      192.168.29.5     k8s-m    <none>           <none>
kube-system   etcd-k8s-m                                 1/1     Running   1          4d      200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-apiserver-k8s-m                       1/1     Running   1          4d      200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-controller-manager-k8s-m              1/1     Running   2          4d      200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-proxy-96bsb                           1/1     Running   0          6h45m   200.168.88.132   k8s-n1   <none>           <none>
kube-system   kube-proxy-wxkmr                           1/1     Running   0          6h44m   200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d      200.168.88.130   k8s-m    <none>           <none>
[root@k8s-m ns]# 

创建一个名为nginx的pod
[root@k8s-m ns]# kubectl run nginx --image=nginx
pod/nginx created
[root@k8s-m ns]# 
再次查看发现nginx已经启动成功
[root@k8s-m ns]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx                                      1/1     Running   0          28s     192.168.215.72   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d      200.168.88.130   k8s-m    <none>           <none>

[root@k8s-m ns]# 
k8s说成功,但我们还是验证下是否是真的成功,结果发现是成功了。
[root@k8s-m ns]# curl 192.168.215.72
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@k8s-m ns]# 

删除nginx pod,注:-n是指定namespace,这里是默认可以省略-n default
[root@k8s-m pod]# kubectl delete pod nginx -n default
pod "nginx" deleted
[root@k8s-m pod]# 

4.2、Yaml操作pod

接下来实践下使用Yaml对pod进行操作。

运行一个nginx的pod
[root@k8s-m pod]# kubectl apply -f pod.yaml 
pod/nginx created
查看nginx是否创建成功
[root@k8s-m pod]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx-test                                      1/1     Running   0          86s    192.168.215.73   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d1h   200.168.88.130   k8s-m    <none>           <none>
验证nginx
[root@k8s-m pod]# curl 192.168.215.73
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@k8s-m pod]# 
删除
[root@k8s-m pod]# kubectl delete -f pod.yaml 
pod "nginx" deleted
[root@k8s-m pod]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
kube-system   calico-kube-controllers-6d9cdcd744-4vb6b   1/1     Running   1          4d1h    192.168.29.6     k8s-m    <none>           <none>
kube-system   calico-node-rpbwg                          1/1     Running   1          4d1h    200.168.88.130   k8s-m    <none>           <none>
kube-system   calico-node-t96v2                          1/1     Running   1          4d1h    200.168.88.132   k8s-n1   <none>           <none>
kube-system   coredns-5897cd56c4-55v75                   1/1     Running   1          4d1h    192.168.29.4     k8s-m    <none>           <none>
kube-system   coredns-5897cd56c4-tf8cb                   1/1     Running   1          4d1h    192.168.29.5     k8s-m    <none>           <none>
kube-system   etcd-k8s-m                                 1/1     Running   1          4d1h    200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-apiserver-k8s-m                       1/1     Running   1          4d1h    200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-controller-manager-k8s-m              1/1     Running   2          4d1h    200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-proxy-96bsb                           1/1     Running   0          7h13m   200.168.88.132   k8s-n1   <none>           <none>
kube-system   kube-proxy-wxkmr                           1/1     Running   0          7h13m   200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d1h    200.168.88.130   k8s-m    <none>           <none>

pod.yaml文件内容如下:

apiVersion: v1
kind: Pod #指定创建的资源为Pod
metadata: #元数据描述
  labels:
    run: nginx-test
  name: nginx-test #pod的名称
spec:
  containers:
  - image: nginx #指定镜像,这里没指定版本所以拿最新版本
    name: nginx 
  restartPolicy: Always #失败重启策略

4.3、pod运行多个容器

创建
[root@k8s-m pod]# kubectl apply -f mpod.yaml 
pod/test-pod created
查看,发现2/2,说明一个pod是可以运行多个容器的
[root@k8s-m pod]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
default       test-pod                                   2/2     Running   0          63s     192.168.215.74   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d1h    200.168.88.130   k8s-m    <none>           <none>

验证nginx
[root@k8s-m pod]# curl 192.168.215.74
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

验证redis,发现是ok的。
[root@k8s-m pod]# kubectl exec -it test-pod -c redis -- redis-cli
127.0.0.1:6379> 

删除
[root@k8s-m pod]# kubectl delete -f mpod.yaml 
pod "test-pod" deleted
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
kube-system   calico-kube-controllers-6d9cdcd744-4vb6b   1/1     Running   1          4d1h    192.168.29.6     k8s-m    <none>           <none>
kube-system   calico-node-rpbwg                          1/1     Running   1          4d1h    200.168.88.130   k8s-m    <none>           <none>
kube-system   calico-node-t96v2                          1/1     Running   1          4d1h    200.168.88.132   k8s-n1   <none>           <none>
kube-system   coredns-5897cd56c4-55v75                   1/1     Running   1          4d1h    192.168.29.4     k8s-m    <none>           <none>
kube-system   coredns-5897cd56c4-tf8cb                   1/1     Running   1          4d1h    192.168.29.5     k8s-m    <none>           <none>
kube-system   etcd-k8s-m                                 1/1     Running   1          4d1h    200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-apiserver-k8s-m                       1/1     Running   1          4d1h    200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-controller-manager-k8s-m              1/1     Running   2          4d1h    200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-proxy-96bsb                           1/1     Running   0          7h33m   200.168.88.132   k8s-n1   <none>           <none>
kube-system   kube-proxy-wxkmr                           1/1     Running   0          7h32m   200.168.88.130   k8s-m    <none>           <none>
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d1h    200.168.88.130   k8s-m    <none>           <none>

mpod.yaml文件内容如下:

apiVersion: v1
kind: Pod #指定创建的资源为Pod
metadata: #元数据描述
  labels:
    run: test-pod
  name: test-pod #pod的名称
spec:
  containers: #这里是复数说明可以放多个镜像
  - image: nginx #指定镜像,这里没指定版本所以拿最新版本
    name: nginx
  - image: redis
    name: redis 
  restartPolicy: Always #失败重启策略

**思考:**一个pod能否运行2个端口相同的nginx容器?答案是不行的,实践如下:

mpod.yaml文件2个镜像都更改为nginx
[root@k8s-m pod]# kubectl apply -f mpod.yaml 
pod/test-pod created
查看,发现报error了
[root@k8s-m pod]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
default       test-pod                                   1/2     Error     0          18s     192.168.215.75   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d1h    200.168.88.130   k8s-m    <none>           <none>

查看日志,发现报端口冲突了。由此得出一个结论,一个pod不能运行多个端口一样的容器
[root@k8s-m pod]# kubectl logs test-pod -c redis -n default
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/06/22 22:44:21 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)

**注:**在一个pod存在多个容器时,想要进入对应的容器,需要使用“-c 容器名称(就是下面的name对应的值)”才能进入到对应容器,不加“-c”会默认进入第一个容器。

containers: #这里是复数说明可以放多个镜像
  - image: nginx #指定镜像,这里没指定版本所以拿最新版本
    name: nginx
  - image: redis
    name: redis 

5、Deployment

Deployment具备多副本、扩缩容、故障转移/自愈、滚动更新以及版本回退能力。

5.1、多副本

5.1.1、命令操作
创建一个名为nginx-tmp的deployment。副本数量为2
[root@k8s-m ~]# kubectl create deployment nginx-tmp --image=nginx --replicas=2
deployment.apps/nginx-tmp created

查看发现在k8s-n1节点已经部署了2个pod
[root@k8s-m ~]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-596bb86f48-q6d4z                 1/1     Running   0          16s    192.168.215.77   k8s-n1   <none>           <none>
default       nginx-tmp-596bb86f48-xklkd                 1/1     Running   0          16s    192.168.215.78   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d4h   200.168.88.130   k8s-m    <none>           <none>
[root@k8s-m ~]# 
删除deployment操作
[root@k8s-m ~]# kubectl delete deployment nginx-tmp
deployment.apps "nginx-tmp" deleted
5.1.2、Yaml操作
[root@k8s-m dpm]# kubectl apply -f nginx-tmp.yaml 
deployment.apps/nginx-tmp created

查看创建的deploy,发现已启动2个pod
[root@k8s-m dpm]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-f4bb75fc8-fhdt5                  1/1     Running   0          17s    192.168.215.81   k8s-n1   <none>           <none>
default       nginx-tmp-f4bb75fc8-vvv6l                  1/1     Running   0          17s    192.168.215.82   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d4h   200.168.88.130   k8s-m    <none>           <none>

删除操作
[root@k8s-m dpm]# kubectl delete -f nginx-tmp.yaml 
deployment.apps "nginx-tmp" deleted

nginx-tmp.yaml文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-tmp
  name: nginx-tmp
spec:
  replicas: 2 #副本数量
  selector:
    matchLabels:
      app: nginx-tmp
  template:
    metadata:
      labels:
        app: nginx-tmp
    spec:
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx
      restartPolicy: Always

5.2、扩缩容

5.2.1、命令方式操作

我们这里以【5.1、多副本】的样例进行相关操作。

查看所有正在运行的pod
[root@k8s-m dpm]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-596bb86f48-fmhcv                 1/1     Running   0          12s     192.168.215.86   k8s-n1   <none>           <none>
default       nginx-tmp-596bb86f48-lkr85                 1/1     Running   0          12s     192.168.215.87   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d5h    200.168.88.130   k8s-m    <none>           <none>

扩容,这里把副本增加至3个
[root@k8s-m dpm]# kubectl scale deployment nginx-tmp --replicas=3
deployment.apps/nginx-tmp scaled

发现副本已经扩容至3个了
[root@k8s-m dpm]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-596bb86f48-fmhcv                 1/1     Running   0          12s     192.168.215.86   k8s-n1   <none>           <none>
default       nginx-tmp-596bb86f48-lkr85                 1/1     Running   0          12s     192.168.215.87   k8s-n1   <none>           <none>
default       nginx-tmp-596bb86f48-s266q                 1/1     Running   0          5m10s   192.168.215.83   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d5h    200.168.88.130   k8s-m    <none>           <none>

缩容,这里把副本减少至1个
[root@k8s-m dpm]# kubectl scale deployment nginx-tmp --replicas=1
deployment.apps/nginx-tmp scaled

发现只剩下1个副本在运行了
[root@k8s-m dpm]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS        RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-596bb86f48-lkr85                 1/1     Running   0          12s     192.168.215.87   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running       3          4d5h    200.168.88.130   k8s-m    <none>           <none>

5.2.2、Yaml方式操作

这里的yaml文件以【5.1.2】内容为准

初始运行状态
[root@k8s-m dpm]# kubectl get pod -A -owide 
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-f4bb75fc8-b87nj                  1/1     Running   0          3s     192.168.215.89   k8s-n1   <none>           <none>
default       nginx-tmp-f4bb75fc8-w8psm                  1/1     Running   0          3s     192.168.215.88   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d5h   200.168.88.130   k8s-m    <none>           <none>

扩容至3个,修改yaml文件的replicas的值为3即可
[root@k8s-m dpm]# kubectl apply -f nginx-tmp.yaml 
deployment.apps/nginx-tmp configured

发现已经扩容至了3个副本
[root@k8s-m dpm]# kubectl get pod -A -owide 
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-f4bb75fc8-95qxg                  1/1     Running   0          12s    192.168.215.90   k8s-n1   <none>           <none>
default       nginx-tmp-f4bb75fc8-b87nj                  1/1     Running   0          114s   192.168.215.89   k8s-n1   <none>           <none>
default       nginx-tmp-f4bb75fc8-w8psm                  1/1     Running   0          114s   192.168.215.88   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d5h   200.168.88.130   k8s-m    <none>           <none>

缩容副本数至1个,修改yaml文件的replicas的值为1即可
[root@k8s-m dpm]# kubectl apply -f nginx-tmp.yaml 
deployment.apps/nginx-tmp configured
[root@k8s-m dpm]# kubectl get pod -A -owide 
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-f4bb75fc8-95qxg                  1/1     Running   0          12s    192.168.215.90   k8s-n1   <none>           
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d5h   200.168.88.130   k8s-m    <none>           <none>

5.3、故障转移、自愈

5.3.1、故障转移

这里需要再加入一台机器才能直观的看到实验效果,我这里加入一台node2(200.168.88.131),怎么加入的我这里就不赘述了【k8s搭建(超详细,保姆级教程)
加入后,在master查看K8S的所有运行信息

查看当前所有运行的信息
[root@k8s-m dpm]#  kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
kube-system   calico-kube-controllers-6d9cdcd744-4vb6b   1/1     Running   1          4d5h   192.168.29.6     k8s-m    <none>           <none>
kube-system   calico-node-42k9b                          1/1     Running   0          91s    200.168.88.132   k8s-n1   <none>           <none>
kube-system   calico-node-rpbwg                          1/1     Running   1          4d5h   200.168.88.130   k8s-m    <none>           <none>
kube-system   calico-node-tm2kk                          1/1     Running   0          27s    200.168.88.131   k8s-n2   <none>           <none>
.....
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d5h   200.168.88.130   k8s-m    <none>           <none>

这里以【5.1.2】的nginx-tmp.yaml进行演示。如下,目前nginx-tmp-f4bb75fc8-gd4w8是运行在节点1(node1),现模拟节点1宕机后nginx-tmp-xxx会不会在节点2启动。

[root@k8s-m dpm]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS        RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-f4bb75fc8-gd4w8                  1/1     Running       0          6s      192.168.215.67   k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running       3          4d5h    200.168.88.130   k8s-m    <none>           <none>

执行节点1宕机操作(poweroff-关机)
[root@k8s-n1 ~]# poweroff
Connection closed by foreign host.
Disconnected from remote host(k8s-node1) at 17:17:48.

要等一段时间,发现node1的nginx-tmp-xx已经开始停掉了,K8S已经在node2上重新创建了一个新的nginx-tmp-xx。
[root@k8s-m ~]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS        RESTARTS   AGE    IP                NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-f4bb75fc8-f2ltm                  1/1     Running       0          19s    192.168.111.196   k8s-n2   <none>           <none>
default       nginx-tmp-f4bb75fc8-gd4w8                  1/1     Terminating   0          10m    192.168.215.67    k8s-n1   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running       3          4d6h   200.168.88.130    k8s-m    <none>           <none>

稍后重启node1节点,K8S过段时间会把nginx-tmp-f4bb75fc8-gd4w8已经停掉的pod移除。
[root@k8s-m ~]# kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE    IP                NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-f4bb75fc8-f2ltm                  1/1     Running   0          10m    192.168.111.196   k8s-n2   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running       3          4d6h   200.168.88.130    k8s-m    <none>           <none>
5.3.2、自愈能力

这里以【5.1.2】的nginx-tmp.yaml进行演示。

[root@k8s-m dpm]#  kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP                NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-f4bb75fc8-bxpgz                  1/1     Running   0          2s      192.168.111.193   k8s-n2   <none>           <none>
kube-system   calico-kube-controllers-6d9cdcd744-4vb6b   1/1     Running   1          4d5h    192.168.29.6      k8s-m    <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d5h    200.168.88.130    k8s-m    <none>           <none>

使用命令删除掉这个nginx-tmp-f4bb75fc8-bxpgz,发现K8S会重新起一个新的nginx-tmp-xxx,这个就是delpoyment的自愈能力
[root@k8s-m dpm]#  kubectl get pod -A -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP                NODE     NOMINATED NODE   READINESS GATES
default       nginx-tmp-f4bb75fc8-bxpgz                  0/1     Terminating   0          23s     192.168.215.66    k8s-n2   <none>           <none>
default       nginx-tmp-f4bb75fc8-r6bsg                  1/1     Running   0          21s     192.168.111.195   k8s-n2   <none>           <none>
......
kube-system   kube-scheduler-k8s-m                       1/1     Running   3          4d5h    200.168.88.130    k8s-m    <none>           <none>

环境搭建篇:k8s搭建(超详细,保姆级教程)
下一篇:【K8S实战】-超详细教程(二)

资料文献:

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值