K8S 集群管理与资源编排02
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