相关连接
- Kubernetes 核心概念 POD及网络
- Kubernetes 核心概念Label、RC、HA、Deployment
- Kubernetes 核心概念 StatefulSet、Service
- Kubernetes存储
- 通过MINIKUBE安装K8S测试环境(国内安装)
- 通过kubeadm安装k8s并配置集群
- 基于K8S搭建HLS直播/点播云服务
- 基于K8S搭建VR直播/点播云服务
StatefulSet
StatefulSet旨在与有状态的应用及分布式系统一起使用。StatefulSet使用起来相当复杂,当应用具有以下特点时才建议使用StatefulSet
- 有唯一的稳定的网络标识符需求。
- 有稳定性、持久化数据存储需求。
- 有序的部署和扩展需求。
- 有序的删除和终止需求。
- 有序的自动滚动更新需求。
如果应用不需要任何稳定的标示、有序的部署、删除和扩展,则该应用应使用一组无状态副本的控制器来部署应用。
如Deployment或ReplicaSet更合适无状态服务需求。
StatefulSet Pod的存储必须基于请求存储类的Persistent Volume Provisioner或由管理员预先配置来提供,基于数据安全性设计,删除或者缩放StatefulSet将不会删除与StatefulSet关联的Volume
#kubectl create -f StatefulSet.yml
apiVersion: app/v1beta1
kind: StatefulSet
metadata:
name: my-web
spec:
ServiceName: "nginx"
replicas: 2
template:
metadata:
name: long-task
labels:
app: long-task
spec:
containers:
- name: nginx
image:nginx:latest
ports:
- containerPort: 80
name: frontend
volumeMounts:
- name: www
mountPath: /user/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: my-storage-class
resources:
requests:
storage: 1Gi
ConfigMap
在实际的应用部署中,需要为各种应用、中间件配置各种参数,如数据库密码、用户名等。而且大多数生产环境配置比较复杂。
Kubernetes提供了configmap,可以在容器启动的时候将配置注入环境变量或者Volume里面。
只要容器里面的进程有Reload机制,就可以实现配置的动态下发。
生成命令 kubectl create configmap example-redis-config --from-file=/root/config.json
获取configmap kubectl get configmap example-redis-config - yaml
目前有三种类型的应用程序运行转态检查可供用户选择
- HTTP健康检查
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
app: httpd
name: liveness-http
spec:
containers:
- name: liveness
image: docker.io/httpd
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /index.html
port: 80
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 5
periodSeconds: 5
- Container Exec:kubelet将在容器中执行一个命令。如果它以状态0退出,则被视为成功。
# Container Exec
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: docker.io/alpine
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
- TCP检查,kubelet将试图打开与容器的套接字。如果不能建立连接,则认为发生故障。
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
app: node
name: liveness-tcp
spec:
containers:
- name: goproxy
image: docker.io/googlecontainer/goproxy:0.1
ports:
- containerPort: 8080
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 20