在Kubernetes(K8s)中,kind
用于指定资源的类型。以下是常见的kind
类型及其详细配置示例:
Pod
- 用途:Kubernetes中最基本的资源类型,包含一个或多个容器。
- 示例:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80
Deployment
- 用途:管理Pod的部署和更新,确保指定数量的Pod副本始终运行。
- 示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-app-image:latest
ports:
- containerPort: 8080
Service
- 用途:为一组Pod提供网络访问,定义访问Pod的方式。
- 示例:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP # 可选类型:NodePort、LoadBalancer、ExternalName
StatefulSet
- 用途:管理有状态应用程序,确保每个Pod具有唯一的身份和稳定的存储。
- 示例:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-statefulset
spec:
replicas: 3
selector:
matchLabels:
app: my-stateful-app
serviceName: my-service
template:
metadata:
labels:
app: my-stateful-app
spec:
containers:
- name: my-stateful-container
image: my-stateful-app-image:latest
ports:
- containerPort: 80
volumeClaimTemplates:
- metadata:
name: data-volume
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
DaemonSet
- 用途:在每个(或指定)节点上运行一个Pod副本,常用于日志收集、监控等。
- 示例:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: my-daemon-app
template:
metadata:
labels:
app: my-daemon-app
spec:
containers:
- name: my-daemon-container
image: my-daemon-app-image:latest
Job
- 用途:运行一次性任务,完成后Pod自动终止。
- 示例:
apiVersion: batch/v1
kind: Job
metadata:
name: my-job
spec:
template:
spec:
containers:
- name: my-job-container
image: my-job-image:latest
command: [ "echo", "Hello World!" ]
restartPolicy: OnFailure
backoffLimit: 4
CronJob
- 用途:按照预定的时间表周期性地运行任务。
- 示例:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: my-cronjob
spec:
schedule: "0 0 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: my-cronjob-container
image: my-cronjob-image:latest
command: [ "echo", "Hello World!" ]
restartPolicy: OnFailure
ConfigMap
- 用途:存储非敏感配置数据,供Pod引用。
- 示例:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
app.properties: |
key1=value1
key2=value2
Secret
- 用途:存储敏感信息,如密码、密钥等,以安全的方式传递给Pod。
- 示例:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: YWRtaW4= # base64编码的"admin"
password: cGFzc3dvcmQ= # base64编码的"password"
Ingress
- 用途:管理从集群外部访问服务的方式,通常与Ingress控制器配合使用。
- 示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
PersistentVolume (PV)
- 用途:定义集群中的持久化存储卷。
- 示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: standard
hostPath:
path: /data/my-pv
StorageClass
- 用途:定义存储类别,指定存储卷的供应方式和参数。
- 示例:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-storageclass
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
zones: us-east-1a, us-east-1b
Namespace
- 用途:用于资源隔离,将集群划分为多个虚拟空间。
- 示例:
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
ServiceAccount
- 用途:定义Pod的身份验证信息,以及与Kubernetes API Server交互的权限。
- 示例:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceaccount
以上示例展示了K8s中常见kind
类型的配置,用户可根据实际需求进行相应的调整和扩展。