【笔记6】K8S常用资源介绍(1)
在k8s集群中,service是一个抽象概念,它通过一个虚拟的IP映射指定的端口,将代理客户端发来的请求转到后端一组pod中的一个上。由于pod中的容器经常在不停地销毁和重建,因此pod的IP会不停的改变,这时候客户端就没法访问到pod了,现在有了service作为客户端和pod的中间层,它在这里抽象出一个虚拟IP,然后集群内部都可以通过这个虚拟IP访问到具体的pod。ClusterIPNodeP
Deployment
1、什么是Deployment
Deployment是一个定义及管理多副本应用(即多个副本 Pod)的新一代对象,与Replication Controller相比,它提供了更加完善的功能,使用起来更加简单方便。
其作用简单来讲就是利用一个模板,提供对应数量的Pod
Deployment定义包括以下几个部分:
- apiVersion:定义资源版本
- kind:定义资源类型
- metadata:定义资源的元数据信息
- spec:定义Pod相关配置信息
- status:运行后的状态信息(K8S自动生成,不需要手动定义)
2、Deployment示例
以下是一个启动busybox的Deployment示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
spec:
containers:
- args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; sleep 30000
image: busybox
imagePullPolicy: Always
name: busybox
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 1
Service
1、什么是Service
在k8s集群中,service是一个抽象概念,它通过一个虚拟的IP映射指定的端口,将代理客户端发来的请求转到后端一组pod中的一个上。
由于pod中的容器经常在不停地销毁和重建,因此pod的IP会不停的改变,这时候客户端就没法访问到pod了,现在有了service作为客户端和pod的中间层,它在这里抽象出一个虚拟IP,然后集群内部都可以通过这个虚拟IP访问到具体的pod。
Service有以下四种类型:
- ClusterIP
- NodePort
- LoadBalancer
- ExternalName
2、Service示例
apiVersion: v1
kind: Service
metadata:
labels:
app: busybox
name: busybox
namespace: default
spec:
ports:
- name: https
port: 443
protocol: TCP
targetPort: 443
type: ClusterIP
DaemonSet
1、什么是DaemonSet
DaemonSet用于在每个node上运行pod的场景下。
2、DaemonSet示例
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: ds-demo
name: ds-demo
spec:
selector:
matchLabels:
app: ds-demo
template:
metadata:
labels:
app: ds-demo
spec:
containers:
- name: ds-demo
image: nginx:1.23.2
ports:
- name: mysql-port
containerPort: 80
StatefulSet
1、什么是StatefulSet
Pod根据是否有数据存储分为有状态和无状态:
无状态:指的Pod运行期间不会产生重要数据,即使有数据产生,这些数据丢失了也不影响整个应用。比如Nginx、Tomcat等应用适合无状态。
有状态:指的是Pod运行期间会产生重要的数据,这些数据必须要做持久化,比如MySQL、Redis、RabbitMQ等。
Deployment和Daemonset用于无状态服务,StatefulSet用于有状态服务。
对于Sts的Pod,有如下特点:
- Pod名固定有序,后缀从0开始,按顺序启动或停止,名称格式以redis为例:redis-0、redis-1、redis-2
- 由于Pod名固定且可预测,域名信息也是固定且可预测的
- 每个Pod对应的PVC也是固定的,即Pod重启或重建后还能挂载上原来的数据卷
2、StatefulSet示例
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
spec:
serviceName: redis-svc ##这里要有一个serviceName,Sts必须和service关联
replicas: 2
selector:
matchLabels:
app: redis-sts
template:
metadata:
labels:
app: redis-sts
spec:
containers:
- image: redis:6.2
name: redis
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis-svc
spec:
selector:
app: redis-sts
ports:
- port: 6379
protocol: TCP
targetPort: 6379
更多推荐
所有评论(0)