kubernetes之pod管理

一、认识pod

在这里插入图片描述

二、pod管理

  1. kubectl命令
网址:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
  1. 运行服务
[kubeadm@server2 ~]$ kubectl run nginx --image=nginx
pod/nginx created

[kubeadm@server2 ~]$ kubectl get pod -n default 
NAME    READY   STATUS              RESTARTS   AGE
nginx   0/1     ContainerCreating   0          20s

[kubeadm@server2 ~]$ kubectl get all -n default 
NAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   0          83s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   3h11m

查看服务信息(服务分配到了server4上)

[kubeadm@server2 ~]$ kubectl describe pod nginx
Name:         nginx
Namespace:    default
Priority:     0
Node:         server4/172.25.60.4
IP:           10.244.2.2
Events:
  Type    Reason     Age        From               Message
  ----    ------     ----       ----               -------
  Normal  Scheduled  <unknown>  default-scheduler  Successfully assigned default/nginx to server4
  Normal  Pulling    36s        kubelet, server4   Pulling image "nginx"
  Normal  Pulled     36s        kubelet, server4   Successfully pulled image "nginx"
  Normal  Created    35s        kubelet, server4   Created container nginx
  Normal  Started    34s        kubelet, server4   Started container nginx

3.交互式运行镜像
–restart=Never:表示退出即结束

[kubeadm@server2 ~]$ kubectl run test -it --image=busyboxplus --restart=Never
If you don't see a command prompt, try pressing enter.
/ # curl 10.244.2.4  # 可以访问nginx
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    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>

退出后结束test这个pod

[kubeadm@server2 ~]$ kubectl get pod
NAME    READY   STATUS      RESTARTS   AGE
nginx   1/1     Running     0          118s
test    0/1     Completed   0          58s
  1. 删除pod
[kubeadm@server2 ~]$ kubectl delete pod test
pod "test" deleted

[kubeadm@server2 ~]$ kubectl delete pod nginx
pod "nginx" deleted
  1. 自主式pod和部署pod的区别
    运行nginx和myapp镜像(自主式pod)
[kubeadm@server2 ~]$ kubectl run nginx --image=nginx
pod/nginx created
[kubeadm@server2 ~]$ kubectl run myapp --image=myapp:v1
pod/myapp created

查看pod的运行状态

[kubeadm@server2 ~]$ kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
myapp   1/1     Running   0          20s
nginx   1/1     Running   0          62s

查看pod在的运行node(默认情况管理端不参加调度)

[kubeadm@server2 ~]$ kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE      NOMINATED NODE   READINESS GATES
myapp   1/1     Running   0          41s   10.244.1.4   server3   <none>           <none>
nginx   1/1     Running   0          83s   10.244.2.5   server4   <none>           <none>

删除myapp

[kubeadm@server2 ~]$ kubectl delete pod myapp
pod "myapp" deleted

创建部署myapp

[kubeadm@server2 ~]$ kubectl create deployment myapp --image=myapp:v1
deployment.apps/myapp created

[kubeadm@server2 ~]$ kubectl get pod
NAME                     READY   STATUS              RESTARTS   AGE
myapp-7449b5b68f-pm5mn   0/1     ContainerCreating   0          7s
nginx                    1/1     Running             0          14m

再次删除myapp会自动生成一个新的myapp(副本)

[kubeadm@server2 ~]$ kubectl delete pod myapp-7449b5b68f-pm5mn
pod "myapp-7449b5b68f-pm5mn" deleted

[kubeadm@server2 ~]$ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
myapp-7449b5b68f-ss8b8   1/1     Running   0          10s
nginx                    1/1     Running   0          15m

[kubeadm@server2 ~]$ kubectl get all
NAME                         READY   STATUS    RESTARTS   AGE
pod/myapp-7449b5b68f-pm5mn   1/1     Running   0          17s
pod/nginx                    1/1     Running   0          14m

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   13h

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp   1/1     1            1           17s

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/myapp-7449b5b68f   1         1         1       17s
[kubeadm@server2 ~]$ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
myapp-7449b5b68f-pm5mn   1/1     Running   0          51s
  1. 对myapp做拉伸
[kubeadm@server2 ~]$ kubectl scale --replicas=2 deployment myapp
deployment.apps/myapp scaled

[kubeadm@server2 ~]$ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
myapp-7449b5b68f-n4k29   1/1     Running   0          8s
myapp-7449b5b68f-ss8b8   1/1     Running   0          5m28s

[kubeadm@server2 ~]$ kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE    IP           NODE      NOMINATED NODE   READINESS GATES
myapp-7449b5b68f-n4k29   1/1     Running   0          41s    10.244.1.7   server3   <none>           <none>
myapp-7449b5b68f-ss8b8   1/1     Running   0          6m1s   10.244.1.6   server3   <none>           <none>
  1. 创建服务,内部访问pod
    service是一个抽象概念,定义了一个服务的多个pod逻辑集合和访问pod的策略,一般把service称为服务。
[kubeadm@server2 ~]$ kubectl expose deployment myapp --port=80 --target-port=80
service/myapp exposed

[kubeadm@server2 ~]$ kubectl get deployments.apps 
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
myapp   2/2     2            2           16m

[kubeadm@server2 ~]$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   13h
myapp        ClusterIP   10.109.226.206   <none>        80/TCP    54s

[kubeadm@server2 ~]$ kubectl describe svc myapp 
Name:              myapp
Namespace:         default
Labels:            app=myapp
Annotations:       <none>
Selector:          app=myapp
Type:              ClusterIP
IP:                10.109.226.206
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.6:80,10.244.1.7:80
Session Affinity:  None
Events:            <none>

[kubeadm@server2 ~]$ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
myapp-7449b5b68f-n4k29   1/1     Running   0          11m
myapp-7449b5b68f-ss8b8   1/1     Running   0          17m

[kubeadm@server2 ~]$ kubectl describe pod myapp-7449b5b68f-n4k29 
Name:         myapp-7449b5b68f-n4k29
Namespace:    default
Priority:     0
Node:         server3/172.25.60.3
Start Time:   Sat, 18 Apr 2020 09:46:31 +0800
Labels:       app=myapp
              pod-template-hash=7449b5b68f
Annotations:  <none>
Status:       Running
IP:           10.244.1.7
IPs:
  IP:           10.244.1.7
Controlled By:  ReplicaSet/myapp-7449b5b68f
Containers:
  myapp:
    Container ID:   docker://cc3ab38b43207687328c1110277bddbadfefbe8952dc317ab1733d20cc5fd035
    Image:          myapp:v1
    Image ID:       docker-pullable://myapp@sha256:9eeca44ba2d410e54fccc54cbe9c021802aa8b9836a0bcf3d3229354e4c8870e
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sat, 18 Apr 2020 09:46:35 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-64lq2 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-64lq2:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-64lq2
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age        From               Message
  ----    ------     ----       ----               -------
  Normal  Scheduled  <unknown>  default-scheduler  Successfully assigned default/myapp-7449b5b68f-n4k29 to server3
  Normal  Pulled     12m        kubelet, server3   Container image "myapp:v1" already present on machine
  Normal  Created    12m        kubelet, server3   Created container myapp
  Normal  Started    12m        kubelet, server3   Started container myapp

测试:
访问clusterip

[kubeadm@server2 ~]$ kubectl run test -it --image=busyboxplus 
If you don't see a command prompt, try pressing enter.
/ # curl 10.109.226.206
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

可以负载均衡

[kubeadm@server2 ~]$ kubectl attach test -it
/ # curl 10.109.226.206/hostname.html
myapp-7449b5b68f-ss8b8
/ # curl 10.109.226.206/hostname.html
myapp-7449b5b68f-n4k29

8 .使用nodeport类型暴露端口,让外部客户端访问pod
NodePort在clusterip基础上为services在每台机器上绑定一个端口,这样就可以通过nodeip:nodeport来访问该服务

方式一:kubectl edit svc myapp  # 修改service的type为NodePort
[kubeadm@server2 ~]$ kubectl edit svc myapp
 52   type: NodePort
方式二:kubectl expose deployment myapp --port=80 --target-poet=80 --type=NodePort

[kubeadm@server2 ~]$ kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE      NOMINATED NODE   READINESS GATES
myapp-7449b5b68f-n4k29   1/1     Running   0          28m   10.244.1.7   server3   <none>           <none>
myapp-7449b5b68f-ss8b8   1/1     Running   0          33m   10.244.1.6   server3   <none>           <none>
test                     1/1     Running   3          14m   10.244.2.6   server4   <none>           <none>

对外提供端口31686
[kubeadm@server2 ~]$ kubectl get svc myapp
NAME    TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
myapp   NodePort   10.109.226.206   <none>        80:31686/TCP   19m

[kubeadm@server2 ~]$ curl 172.25.60.3:31686
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

[kubeadm@server2 ~]$ curl 172.25.60.3:31686/hostname.html
myapp-7449b5b68f-ss8b8

[kubeadm@server2 ~]$ curl 172.25.60.3:31686/hostname.html
myapp-7449b5b68f-n4k29
  1. 更新pod镜像和回滚
    更新pod
[kubeadm@server2 ~]$ kubectl set image deployments myapp myapp=myapp:v2 --record
deployment.apps/myapp image updated

查看历史版本

[kubeadm@server2 ~]$ kubectl rollout history deployment myapp
deployment.apps/myapp 
REVISION  CHANGE-CAUSE
1         <none>
2         kubectl set image deployments myapp myapp=myapp:v2 --record=true

测试:
对外暴露端口31686

[kubeadm@server2 ~]$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        13h
myapp        NodePort    10.109.226.206   <none>        80:31686/TCP   32m

更新为v2版本

[kubeadm@server2 ~]$ curl 172.25.60.3:31686
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

回滚版本

[kubeadm@server2 ~]$ kubectl rollout undo deployment myapp --to-revision=1
deployment.apps/myapp rolled back

[kubeadm@server2 ~]$ curl 172.25.60.3:31686
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值