MENU

K8S 集群管理与资源编排02

October 4, 2019 • Read: 1871 • kubernetes

1、Pod管理
1.1给node打标签

kubectl label nodes 主机名 key=value
kubectl label nodes 192.168.3.203 team=dev

1.2重启策略,这里的重启你阔以理解为重建

apiVersion: v1
kind: Pod
metadata:
name: foo
namespace: awesomeapps
spec:
containers:
- name: foo
image: janedoe/awesomeapp:v1
restartPolicy: Always 

Always:当容器终止退出后,总是重启容器,默认策略。
OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
Never::当容器终止推出,从不重启容器。
2、健康检查
Probe支持以下三种检查方法:
httpGet ,发送HTTP请求,返回200-400范围状态码为成功。
exec 执行Shell命令返回状态码是0为成功。
tcpSocket 发起TCP Socket建立成功。

apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: k8s.gcr.io/busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5

说明
livenessProbe 如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
readinessProbe 如果检查失败, Kubernetes会把Pod从service endpoints中剔除。

3、pod调度
K8S 通过watch的机制进行组件之间协同

3.1nodeName跳过调度器将Pod调度到指定的Node名称上

apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeName: 192.168.3.203
containers:
- name: nginx
image: nginx:1.15 

3.2 nodeSelector跳过调度器将Pod调度到匹配Label的Node上

apiVersion: v1
kind: Pod
metadata:
name: pod-example
spec:
nodeSelector:
env_role: dev
containers:
- name: nginx
image: nginx:1.15 

4、Pod故障排查

Pod 状态通过执行 kubectl describe TYPE/NAME查看任务执行过程

通过 kubectl logs TYPE/NAME [-c CONTAINER] 查看容器里面的日志,如kubectl logs logs nginx
通过 kubectl exec POD [-c CONTAINER] -- COMMAND [args...] 进入容器排查运行中的问题,如 kubectl exec -it nginx bash
5、Service
5.1 Serviece 的说明
Serviece可以防止Pod失联,是定义一组Pod的访问策略 ,
支持ClusterIP(默认,分配一个集群内部可以访问的虚拟IP(VIP) ),

apiVersion: v1
kind: Service
  metadata:
    name: my-service
spec:
  selector:
  app: A
ports:
  - protocol: TCP
    port: 80
    targetPort: 8080 

NodePort(在每个Node上分配一个端口作为外部访问入口 )

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
  app: A
  ports:
    - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30001
  type: NodePort 

以及LoadBalancer(工作在特定的Cloud 上,例如Google Cloud, AWS, OpenStack )

三种类型,Service的底层实现主要有Iptables和IPVS二种网络模式
5.1 Pod与Service 之间的关系
通过label-selector相关联,service通过标签选择器来指定一组关联的Pod
每个service对应一个endpoint的控制器,endpoint控制器来关联pod,转发到pod 的策略为轮询

kubectl get svc
kubectl get ep

labels:
app: nginx

selector:
app: nginx

通过Service实现Pod的负载均衡( TCP/UDP 4层),实现方式为IPtables或者IPVS,IPtables功能丰富,规则更新为全量更新,规模越大性能越差,无法在大规模场景中应用,IPVS性能高,本集群使用的是IPVS方式
5.2 IPVS 工作原理
工作在内核态,规则更新为增量更新,

查看ipvs 虚拟设备,设备所绑定的IP就是service的IP

查看ipvs 转发的端口,rr为默认调度策略(轮询),也可以wrr(加权轮询),lc(最小连接,将请求转发到空闲的pod),wlc(加权最小连接),ip hash 等等

设置调度算法
vi /opt/kubernetes/cfg/kube-proxy

兼总条贯 知至知终

无标签