Kubernetes的pod管理

目录

一、应用部署

二、编写yaml文件

三、init容器

四、探针

1、存活探针

2、就绪探针


一、应用部署

下载测试镜像

docker pull yakexi007/myapp:v1
docker pull yakexi007/myapp:v2
docker tag yakexi007/myapp:v1  reg.westos.org/library/myapp:v1
docker tag yakexi007/myapp:v2 reg.westos.org/library/myapp:v2
docker push reg.westos.org/library/myapp:v1
docker push reg.westos.org/library/myapp:v2

Kubernetes的pod管理_第1张图片

Kubernetes的pod管理_第2张图片

创建自主式pod (生产不推荐)

kubectl run demo --image=myapp:v1
kubectl get pod -o wide

查看pod详情 及删除

kubectl describe  pod demo
kubectl delete  pod demo

Kubernetes的pod管理_第3张图片

创建控制器(推荐)

kubectl create deployment myapp --image=myapp:v1 --replicas=3

控制器自动维护pod副本数

kubectl get pod
kubectl get deployments.apps
kubectl delete  pod myapp-67984c8646-kgxl5
kubectl get deployments.apps
kubectl get pod

Kubernetes的pod管理_第4张图片

在远程pod中执行命令

kubectl exec myapp-67984c8646-98zh4 -- ls /usr/share/nginx/html

扩容pod数量

kubectl  scale deployment myapp --replicas=6
kubectl get pod

缩容

kubectl  scale deployment myapp --replicas=3
kubectl get pod

Kubernetes的pod管理_第5张图片

通过service暴露pod

kubectl expose deployment myapp --port=80 --target-port=80

查看svc详情

kubectl describe  svc myapp

Kubernetes的pod管理_第6张图片

curl 10.98.121.24
curl 10.98.121.24/hostname.html

Kubernetes的pod管理_第7张图片

service自动发现pod扩容与缩容,自动更新endpoints,实现对应用的负载均衡

service默认使用clusterip类型,只能在集群中访问

nodeport类型,可以在集群外部访问

kubectl edit svc myapp
kubectl get svc

Kubernetes的pod管理_第8张图片

访问集群任意节点+端口

curl 192.168.67.11:32209/hostname.html
curl 192.168.67.12:32209/hostname.html
curl 192.168.67.13:32209/hostname.html

更新应用版本

kubectl set image deployment/myapp myapp=myapp:v2
curl 192.168.67.13:32209

查看应用历史版本

kubectl rollout history deployment myapp

Kubernetes的pod管理_第9张图片

回滚

kubectl rollout undo deployment myapp --to-revision=1
curl 192.168.67.11:32209

删除应用

kubectl delete  deployments.apps myapp
kubectl delete svc myapp
kubectl get pod

Kubernetes的pod管理_第10张图片

集群通过namespace来做资源隔离,默认操作的资源都指向default

kubectl get ns

Kubernetes的pod管理_第11张图片

二、编写yaml文件

随着微服务的使用,在linux上使用vim或者vi命令编辑yml文件的时候,会自动缩进,导致文件根本 无法使用。

解决办法
粘贴前先执行如下命令: 再粘贴的时候,里面的内容就不再缩进了,完美解决。

:set paste

mkdir pod
cd pod/

获取帮助

kubectl explain pod.spec.containers

Kubernetes的pod管理_第12张图片

获取yaml模板

kubectl run demo --image nginx --dry-run=client  -o yaml > pod.yaml

Kubernetes的pod管理_第13张图片

vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo
  name: demo
spec:
  containers:
  - image: nginx
    name: demo
    imagePullPolicy: IfNotPresent

Kubernetes的pod管理_第14张图片

创建pod

kubectl create -f pod.yaml

查看详情

kubectl get pod -o wide
kubectl describe  pod demo
kubectl get pod demo -o yaml

Kubernetes的pod管理_第15张图片

Kubernetes的pod管理_第16张图片
上传redis
Kubernetes的pod管理_第17张图片
示例:
1.  定义多个容器
vim pod.yml
cat pod.yml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo
  name: demo
spec:
  containers:
  - image: nginx
    name: demo
  - image: redis:6.2.4
    name: redis

Kubernetes的pod管理_第18张图片

kubectl apply -f pod.yml
kubectl describe pod

Kubernetes的pod管理_第19张图片
删除
kubectl delete  -f pod.yml

2.定义拉取策略
vim pod.yml
cat pod.yml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo
  name: demo
spec:
  containers:
  - image: nginx
    name: demo
    imagePullPolicy: IfNotPresent

Kubernetes的pod管理_第20张图片

kubectl apply -f pod.yml
kubectl get pod demo -o yaml
kubectl delete -f pod.yml

Kubernetes的pod管理_第21张图片

资源限制

vim pod.yml
cat pod.yml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo
  name: demo
spec:
  containers:
  - image: nginx
    name: demo
    imagePullPolicy: IfNotPresent
    resources:
      limits:
        cpu: 1
        memory: 200M
      requests:
        cpu: 0.5
        memory: 100M

Kubernetes的pod管理_第22张图片

kubectl apply -f pod.yml
kubectl get pod demo -o yaml

Kubernetes的pod管理_第23张图片

Kubernetes的pod管理_第24张图片

Guaranteed,保证级别:Pod 中的容器都设置了 CPU 和 Memory 的 requests 和 limits,并且这些值相等。此时,如果资源满足所有 Guaranteed 类别的 Pod 的需求,则这些 Pod 会被同时调度在集群中,保证它们的运行。


Burstable,突发级别:Pod 中至少有一个容器设置了 CPU 和 Memory 的 requests 和 limits,但是这些值不相等。此时,如果资源足够,那么这些 Pod 会被相应地调度,但是它们的性能可能会受到限制,因为它们能够使用的资源是有上限的。


BestEffort,尽力级别:Pod 中的容器没有设置 CPU 和 Memory 的 requests 和 limits。此时,这些容器会尽力地获取集群中未被占用的资源,但是它们的资源使用是无法保证的,因为它们需要等待集群中已分配的所有资源使用完毕才能够获得更多的资源。

4.端口映射

##有配置NodePort,外部流量可访问k8s中的服务

vim pod.yml
cat pod.yml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo
  name: demo
spec:
  containers:
  - image: nginx
    name: demo
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
      hostPort: 80

Kubernetes的pod管理_第25张图片

kubectl apply -f pod.yml
kubectl get pod -o wide
kubectl describe  pod demo

Kubernetes的pod管理_第26张图片
5.指定节点
vim pod.yml
cat pod.yml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo
  name: demo
spec:
  hostNetwork: true
  nodeSelector:
    kubernetes.io/hostname: k8s2
  containers:
  - image: nginx
    name: demo
    imagePullPolicy: IfNotPresent

Kubernetes的pod管理_第27张图片

kubectl apply -f pod.yml
kubectl describe  pod demo
kubectl delete -f pod.yml

Kubernetes的pod管理_第28张图片

Kubernetes的pod管理_第29张图片

三、init容器

vim init-pod.yaml
cat init-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app.kubernetes.io/name: MyApp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox
    command: ['sh', '-c', "until nslookup myservice.default.svc.cluster.local; do echo waiting for myservice; sleep 2; done"]

Kubernetes的pod管理_第30张图片

kubectl apply -f init-pod.yaml
kubectl get pod
Kubernetes的pod管理_第31张图片
在init容器没有成功运行之前,主容器不会被运行
添加svc定义
vim myservice.yaml
cat myservice.yaml

apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

Kubernetes的pod管理_第32张图片

kubectl apply -f myservice.yaml
kubectl get svc

Kubernetes的pod管理_第33张图片

svc解析成功后,init容器退出,主容器运行

yum install -y bind-utils
dig -t A myservice.default.svc.cluster.local. @10.96.0.10

Kubernetes的pod管理_第34张图片

kubectl get pod

回收资源

kubectl delete  -f init-pod.yaml
kubectl delete  -f myservice.yaml

Kubernetes的pod管理_第35张图片

四、探针

1、存活探针

vim liveness-pod.yaml
cat liveness-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: nginx
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 3
      periodSeconds: 3

Kubernetes的pod管理_第36张图片

在存活探针检测失败导致容器不断被重启

kubectl apply -f liveness-pod.yaml
kubectl get pod -w

Kubernetes的pod管理_第37张图片

kubectl describe  pod liveness-http
kubectl delete  -f liveness-pod.yaml
Kubernetes的pod管理_第38张图片

2、就绪探针

vim liveness-pod.yaml
cat liveness-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: nginx
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 3
      periodSeconds: 3
    readinessProbe:
      httpGet:
        path: /test.html
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 5

Kubernetes的pod管理_第39张图片

kubectl apply -f liveness-pod.yaml

就绪探针失败导致容器一直未就绪

kubectl get pod
kubectl describe  pod liveness-http

Kubernetes的pod管理_第40张图片

创建测试页面

kubectl exec  liveness-http -- touch /usr/share/nginx/html/test.html

就绪探针成功

kubectl get pod

创建svc

kubectl expose pod liveness-http --port 80 --target-port 80

就绪容器自动上线

kubectl describe  svc liveness-http

Kubernetes的pod管理_第41张图片

删除测试页面

kubectl exec  liveness-http -- rm /usr/share/nginx/html/test.html

就绪探针失败,容器未就绪

kubectl get pod

在svc中容器自动下线

kubectl describe  svc liveness-http
Kubernetes的pod管理_第42张图片

回收

kubectl delete  -f liveness-pod.yaml

你可能感兴趣的:(kubernetes,linux,运维,服务器)