Pod资源管理和探针

一、pod概述

■ port
port是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个service

■ nodePort
nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service

■ targetPort
targetPort是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器

■ containerPort
containerPort是pod内部容器的端口,targetPort映射到containerPort

在这里插入图片描述

注:

■ 从外部访问
从nodeport端口经过kube-proxy,kube-proxy再把请求给targetPort,targetPort会映射到容器的containerPort,直接访问服务

■ 从内部访问
Port端口经过kube-proxy把请求给targetPort,targetPort会映射到容器的containerPort,直接访问服务

1.1、pod的特点

  • 最小部署单元
  • 一组容器的集合
  • 一个Pod中的容器共享网络命名空间
  • Pod是短暂的 (pod无法重启)

1.2、Pod容器分类

■ infrastructure container 基础容器
● 维护整个Pod网络空间
● node节点操作
● 查看容器的网络

[root@node01 ~]# cd /opt/kubernetes/
[root@node01 kubernetes]# ls
bin  cfg  ssl
[root@node01 kubernetes]# cd cfg
[root@node01 cfg]# ls
bootstrap.kubeconfig  flanneld  kubelet  kubelet.config  kubelet.kubeconfig  kube-proxy  kube-proxy.kubeconfig
[root@node01 cfg]# vim kubelet

在这里插入图片描述
#每次创建Pod时候就会创建,与Pod对应的,对于用户是透明的

[root@node01 ~]# docker ps

在这里插入图片描述

■ initcontainers 初始化容器(可以提供依赖环境,为业务容器提供初始化环境)
先于业务容器开始执行,原先Pod中容器是并行开启,现在进行了改进

■ container 业务容器
并行启动

1.3、镜像拉取策略(image PullPolicy)

■ IfNotPresent:默认值,镜像在宿主机上不存在时才拉取

■ Always:每次创建Pod都会重新拉取一次镜像

■ Never:Pod永远不会主动拉取这个镜像

[root@master01 ~]# kubectl edit deployment/nginx-deployment

在这里插入图片描述

1.4、自动测试命令的正确性,并不执行创建

[root@master01 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run  #可检查语法

在这里插入图片描述

1.5、查看生成yaml格式

[root@master01 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml     #o为out,输出

在这里插入图片描述

[root@master01 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml > /opt/nginx-test.yaml

在这里插入图片描述

1.6、查看生成json格式

[root@master01 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json

在这里插入图片描述

1.7、将现有的资源生成模板导出(备份正在运行的pod)

[root@master01 ~]# kubectl get deploy/nginx-deployment --export -o yaml

在这里插入图片描述

1.7.1、保存到文件中

[root@master01 ~]# kubectl get deploy/nginx-deployment --export -o yaml > my-deploy.yaml

在这里插入图片描述

1.7.2、查看字段帮助信息

[root@master01 ~]# kubectl explain pods.spec.containers

1.7.3、强制删除pod

kubectl delete pod xxx --force --grace-period=0

二、部署harbor创建私有项目

[root@harbor ~]# cd /usr/local/bin
[root@harbor bin]# rz

[root@harbor bin]# ls
docker-compose
[root@harbor bin]# chmod +x docker-compose 
[root@harbor bin]# ls
docker-compose
[root@harbor bin]# cd ..
[root@harbor local]# rz

在这里插入图片描述

[root@harbor local]# tar zxvf harbor-offline-installer-v1.2.2.tgz
[root@harbor local]# cd harbor/
[root@harbor harbor]# vim harbor.cfg 

在这里插入图片描述

[root@harbor harbor]# sh install.sh  #启动安装

在这里插入图片描述

2.1、登录

在这里插入图片描述

2.2、node节点配置连接私有仓库

[root@node01 ~]# vim /etc/docker/daemon.json 

在这里插入图片描述

[root@node02 ~]# vim /etc/docker/daemon.json 

在这里插入图片描述

[root@node02 docker]# systemctl restart docke
[root@node01 docker]# systemctl restart docke
[root@node01 ~]# docker login 192.168.140.70
[root@node02 ~]# docker login 192.168.140.70

在这里插入图片描述

2.3、下载Tomcat镜像进行推送

[root@node01 ~]# docker pull tomcat:8.0.52   #需要登录才能下载,login

在这里插入图片描述

[root@node01 ~]# docker tag tomcat:8.0.52 192.168.140.70/project/tomcat   #镜像打标签

在这里插入图片描述

[root@node01 ~]# docker push 192.168.140.70/project/tomcat
# 上传镜像到harbor

在这里插入图片描述

[root@master01 ~]# vim tomcat-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-tomcat
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: my-tomcat
    spec:
      containers:
      - name: my-tomcat
        image: docker.io/tomcat:8.0.52
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-tomcat
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 31111
  selector:
    app: my-tomcat
[root@master01 ~]# kubectl create -f tomcat-deployment.yaml 

在这里插入图片描述

在这里插入图片描述

注:
如果遇到处于Terminating状态的无法删除的资源如何处理
这种情况下可以使用强制删除命令:
kubectl delete pod [pod name] --force --grace-period=0 -n [namespace]

2.4、查看登录凭据,并解码

[root@node02 ~]# cd .docker/
[root@node02 .docker]# ls
config.json
[root@node02 .docker]# cat config.json 
{
    
    
	"auths": {
    
    
		"192.168.140.20": {
    
    
			"auth": "emhhbmdzYW46QWJjMTIzNDU="
		},
		"192.168.140.70": {
    
    
			"auth": "YWRtaW46SGFyYm9yMTIzNDU="
		}
	}
}
[root@master01 ~]# vim registry-pull-secret.yaml    #创建凭证

在这里插入图片描述

2.5、创建secret资源

[root@master01 ~]# kubectl create -f registry-pull-secret.yaml 
[root@master01 ~]# kubectl get secret   #查看secret资源

在这里插入图片描述

2.6、从私有仓库下载镜像

[root@master01 ~]# kubectl delete -f tomcat-deployment.yaml 
[root@master01 ~]# vim tomcat-deployment.yaml 

在这里插入图片描述

[root@master01 ~]# kubectl create -f tomcat-deployment.yaml 
[root@master01 ~]# kubectl get pods -w

在这里插入图片描述
在这里插入图片描述

[root@master01 ~]# kubectl describe pod my-tomcat

在这里插入图片描述

在这里插入图片描述

三、Pod和Container的资源请求和限制

spec.containers[].resources.limits.cpu     #cpu上限 
spec.containers[].resources.limits.memory   #内存上限
spec.containers[].resources.requests.cpu   #创建时分配的基本CPU资源
spec.containers[].resources.requests.memory  #创建时分配的基本内存资源

注:请求资源是指创建容器初始化给的资源
限制资源是指容器运行时,最高不能超过的资源

3.1、示例

[root@master01 ~]# mkdir demo
[root@master01 ~]# cd demo/
[root@master01 demo]# vim pod2.yaml

在这里插入图片描述

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

在这里插入图片描述

[root@master01 demo]# kubectl get pods -o wide

在这里插入图片描述

[root@master01 demo]# kubectl describe nodes 192.168.140.20  #查看具体事件

在这里插入图片描述

3.2、重启策略

重启策略:Pod在遇到故障之后重启(重新创建)的动作
1:Always:当容器终止退出后,总是重启容器,默认策略
2:OnFailure:当容器异常退出(退出状态码非0)时,重启容器
3:Never:当容器终止退出,从不重启容器

(注意:k8s中不支持重启Pod资源,只有删除重建)

3.2.1、示例

[root@master01 demo]# vim pod3.yaml
apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
  - name: busybox
    image: busybox
    command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]
    args:                           #使用参数
    - /bin/sh                    
    - -c                              #使用命令
    - sleep 30; exit 3       #休眠30秒,然后异常退出
[root@master01 demo]# kubectl apply -f pod3.yaml 
[root@master01 demo]# kubectl get pods -w
[root@master01 demo]# kubectl get pods 

在这里插入图片描述

[root@master01 demo]# kubectl delete -f pod3.yaml 
[root@master01 demo]# vim pod3.yaml 

在这里插入图片描述

[root@master01 demo]#  
[root@master01 demo]# kubectl get pods 

在这里插入图片描述

注:跟container同一个级别
完成状态不会进行重启

四、健康检查:探针(Probe)

4.1、探针策略(执行的动作)

规则可以同时定义
livenessProbe 如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
ReadinessProbe 如果检查失败,kubernetes会把Pod从service endpoints(proxy的负载均衡)中剔除

4.2、Probe支持三种检查方法

  • httpGet 发送http请求,返回200-400范围状态码为成功
  • exec 执行Shell命令返回状态码是0为成功
  • tcpSocket 发起TCP Socket建立成功

4.2.1、示例

[root@master01 demo]# vim pod4.yaml 
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 10
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
        
[root@master01 demo]# kubectl get pods -w

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50344814/article/details/115279307