k8s---高级pod&调度

15 篇文章 2 订阅
9 篇文章 0 订阅

pod进阶

  • limits.cup:cpu上限
  • limits.memory:内存上限
  • requests.cpu:创建时分配的基本CPU资源
  • requests.memory:创建时分配的基本内存资源
    例如:
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: db
    image: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "password"
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: wp
    image: wordpress
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

[root@localhost demo]# kubectl apply -f pod2.yaml 
pod/frontend created

#查看具体事件
[root@localhost demo]# kubectl describe pod frontend
[root@localhost demo]# kubectl describe nodes 192.168.241.4
Namespace                  Name                                     CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ---------                  ----                                     ------------  ----------  ---------------  -------------
  default                    frontend                                 500m (50%)    1 (100%)    128Mi (3%)       256Mi (6%)
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource  Requests    Limits
  --------  --------    ------
  cpu       550m (55%)  1100m (110%)
  memory    228Mi (5%)  556Mi (14%)
#成功部署好后查看状态
[root@localhost demo]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
frontend                          2/2     Running   1          3m21s

#查看node节点资源状态
[root@localhost demo]# kubectl describe nodes 192.168.241.4
# 查看命名空间
[root@localhost demo]# kubectl get ns
NAME          STATUS   AGE
default       Active   17d
kube-public   Active   17d
kube-system   Active   17d

pod重启策略

Pod在遇到故障之后重启的动作

  • Always:当容器终止退出后,总是重启容器,默认策略
  • OnFailure:当容器异常退出(退出状态码非0)时,重启容器
  • Never:当容器终止退出,从不重启容器。
    注意:k8s中不支持重启Pod资源,只有删除重建
[root@localhost demo]# kubectl edit deploy
 restartPolicy: Always				#默认策略

例如

[root@localhost demo]# vim pod3.yaml
apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 30; exit 3
[root@localhost demo]# kubectl apply -f pod3.yaml 
pod/foo created

#查看重启次数加1
[root@localhost demo]# kubectl get pods
NAME                              READY   STATUS             RESTARTS   AGE
foo                               1/1     Running            1          50s
[root@localhost demo]# vim pod3.yaml

apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 10;exit 3
  restartPolicy: Never			#设置从不重启,跟container同一个级别

[root@localhost demo]# kubectl get pods
NAME                              READY   STATUS      RESTARTS   AGE
foo                               0/1     Completed   0          29s

健康检查——探针

探针的三种检查方法

  • httpGet 发送http请求,返回200-400范围状态码为成功。
  • exec 执行Shell命令返回状态码是0为成功。
  • tcpSocket 发起TCP Socket建立成功
    探针的两种规则
  • livenessProbe 如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
  • ReadinessProbe 如果检查失败,kubernetes会把Pod从service endpoints中剔除。
    例如:exec方式
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy;sleep 30
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

[root@localhost demo]# kubectl get pods
liveness-exec                     1/1     Running     4          4m11s

例如:httpGet方式

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/liveness
    args:
    - /server
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3

例如:tcpSocket方式

apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
  - name: goproxy
    image: k8s.gcr.io/goproxy:0.1
    ports:
    - containerPort: 8080
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20

调度约束

Kubernetes通过watch的机制进行每个组件的协作,每个组件之间的设计实现了解耦。
在这里插入图片描述

调度方式

  • nodeName用于将Pod调度到指定的Node名称上(跳过调度器直接分配)
  • nodeSelector用于将Pod调度到匹配Label的Node上
    例如:nodeName
apiVersion: v1  
kind: Pod  
metadata:
  name: pod-example  
  labels:
    app: nginx  
spec:
  nodeName: 192.168.241.4
  containers:
  - name: nginx  
    image: nginx:1.15

[root@localhost demo]# kubectl create -f pod5.yaml 
pod/pod-example created
[root@localhost demo]# kubectl get pods
pod-example                       1/1     Running   0          86s
//查看网络
[root@localhost demo]# kubectl get pods -o wide
pod-example                       1/1     Running   0          2m9s   172.17.47.7   192.168.241.4   <none>

查看详细事件(发现未经过调度器)

[root@localhost demo]# kubectl describe pod pod-example

Events:
  Type    Reason   Age   From                      Message
  ----    ------   ----  ----                      -------
  Normal  Pulled   97s   kubelet, 192.168.241.4  Container image "nginx:1.15" already present on machine
  Normal  Created  97s   kubelet, 192.168.241.4  Created container
  Normal  Started  97s   kubelet, 192.168.241.4  Started container

清空所有pod

[root@localhost demo]# kubectl delete -f .
[root@localhost demo]# kubectl get pods
No resources found.

例如:nodeSelector

//获取标签帮助
[root@localhost demo]# kubectl label --help
Usage:
  kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N
[--resource-version=version] [options]

需要获取node上的NAME名称

[root@localhost demo]# kubectl get node
NAME              STATUS   ROLES    AGE   VERSION
192.168.241.3   Ready    <none>   14d   v1.12.3
192.168.241.4   Ready    <none>   14d   v1.12.3

给对应的node设置标签分别为hzh=a和hzh=b

[root@localhost demo]# kubectl label nodes 192.168.241.4  hzh=a
node/192.168.241.4  labeled
[root@localhost demo]# kubectl label nodes 192.168.241.3 hzh=b
node/192.168.241.3 labeled

查看标签

[root@localhost demo]# kubectl get nodes --show-labels
NAME              STATUS   ROLES    AGE   VERSION   LABELS
192.168.241.4   Ready    <none>   14d   v1.12.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,hzh=a,kubernetes.io/hostname=192.168.241.4
192.168.241.3   Ready    <none>   14d   v1.12.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,hzh=b,kubernetes.io/hostname=192.168.241.4
[root@localhost demo]# vim pod5.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:
    app: nginx
spec:
  nodeSelector: 
    kgc: b
  containers:
  - name: nginx
    image: nginx:1.15

[root@localhost demo]# kubectl apply -f pod5.yaml 
pod/pod-example created

#查看详细事件(通过事件可以观察经过调度器分配)
[root@localhost demo]# kubectl describe pod pod-example
Events:
  Type    Reason     Age   From                      Message
  ----    ------     ----  ----                      -------
  Normal  Scheduled  67s   default-scheduler         Successfully assigned default/pod-example to 192.168.241.4
  Normal  Pulling    66s   kubelet, 192.168.241.4  pulling image "nginx:1.15"
  Normal  Pulled     24s   kubelet, 192.168.241.4  Successfully pulled image "nginx:1.15"
  Normal  Created    24s   kubelet, 192.168.241.4  Created container
  Normal  Started    24s   kubelet, 192.168.241.4  Started container

故障排除

描述
pendingpod创建已经提交到kubernetes,但是,因为某种原因而不能顺利创建,例如下载镜像慢,调度不成功
Runningpod已经绑定到一个节点,并且已经创建了所有容器,至少有一个容器正在运行中,或正在启动或重新启动
Succeededpod中的所有容器都已经成功终止,不会重新启动
FailedPod的所有容器均已终止,且至少有一个容器已经故障中终止,也就是说,容器要么以非零状态退出,要么被系统终止
Unknown由于某种原因apiserver无法获得pod的状态,通常是由于master与pod所在主机kubelet通信时出错
查看pod事件
kubectl describe TYPE NAME_PREFIX  

查看pod日志(Failed状态下)
kubectl logs POD_NAME

进入pod(状态为running,但是服务没有提供)
kubectl exec –it POD_NAME bash
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值