Kubernetes是一个开源的容器编排平台,可以自动化部署、扩展和管理应用程序容器。
Pod是Kubernetes中最小的可部署单元,它由一个或多个容器组成,并共享网络命名空间和存储卷。Pod提供了一种抽象层,使得可以将多个容器作为单个逻辑单元进行管理。
可以使用kubectl create或kubectl apply命令来创建Pod。例如:
kubectl create -f pod.yaml
Deployment是Kubernetes中用于管理Pod副本集的控制器。它允许定义期望的状态,并确保集群中运行的Pod数量与所需状态匹配。
可以使用kubectl create或kubectl apply命令来创建Deployment。例如:
kubectl create -f deployment.yaml
Service是一种抽象,用于将后端Pod暴露给其他部分。它为Pod提供了稳定的IP地址和DNS名称,并支持负载均衡和服务发现。
Service有四种类型:ClusterIP、NodePort、LoadBalancer和ExternalName。
可以使用kubectl create或kubectl apply命令来创建Service。例如:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
kubectl create -f service.yaml
命名空间是一种用于将资源分组的机制。它可以帮助用户管理集群中的多个团队或项目,并提供隔离和访问控制。
可以使用kubectl create或kubectl apply命令来创建命名空间。例如:
kubectl create namespace my-namespace
可以使用kubectl get命令来列出所有的Pod。例如:
kubectl get pods
可以使用kubectl get命令,并通过-n选项指定要列出的命名空间。例如:
kubectl get pods -n my-namespace
可以使用kubectl describe命令来获取Pod的详细信息。例如:
kubectl describe pod my-pod
可以使用kubectl delete命令来删除一个Deployment。例如:
kubectl delete deployment my-deployment
可以使用kubectl scale命令来扩展一个Deployment中的Pod数量。例如:
kubectl scale deployment my-deployment --replicas=3
可以使用kubectl set image命令来更新一个Deployment中的镜像版本。例如:
kubectl set image deployment/my-deployment my-container=my-image:v2
可以使用kubectl rollout pause命令来暂停一个Deployment中的副本集更新。例如:
kubectl rollout pause deployment/my-deployment
可以使用kubectl rollout resume命令来恢复一个Deployment中的副本集更新。例如:
kubectl rollout resume deployment/my-deployment
可以使用kubectl rollout undo命令来回滚一个Deployment。例如:
kubectl rollout undo deployment/my-deployment
可以使用kubectl get命令来列出所有的Service。例如:
kubectl get services
可以使用kubectl get命令,并通过-n选项指定要列出的命名空间。例如:
kubectl get services -n my-namespace
可以使用kubectl describe命令来获取Service的详细信息。例如:
kubectl describe service my-service
可以使用kubectl delete命令来删除一个Service。例如:
kubectl delete service my-service
ConfigMap是一种用于存储非机密数据的Kubernetes对象,例如配置文件、环境变量等。它们可以简化应用程序配置管理,并将配置与应用程序分离。
可以使用kubectl create或kubectl apply命令来创建ConfigMap。例如:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
config.ini: |
[database]
host = db.example.com
username = myuser
password = mypassword
kubectl create configmap my-config --from-literal=foo=bar
Secret是一种用于存储机密数据的Kubernetes对象,例如密码、API密钥等。它们以加密方式保存在etcd中,并且只有授权用户才能访问。
可以使用kubectl create或kubectl apply命令来创建Secret。例如:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: bXl1c2Vy
password: bXlwYXNzd29yZA==
kubectl create secret generic my-secret --from-literal=password=abc123
StatefulSet是Kubernetes中用于管理有状态应用程序的控制器。与Deployment不同,它确保Pod的唯一标识性,并按顺序创建和删除Pod。
可以使用kubectl create或kubectl apply命令来创建StatefulSet。例如:
kubectl create -f statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-statefulset
spec:
serviceName: my-service
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image
ports:
- containerPort: 8080
volumeMounts:
- name: data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
DaemonSet是用于在集群中运行一个Pod副本的控制器,以确保在每个节点上都有一个实例运行。它们通常用于监视宿主机资源,例如日志收集、监视等。
可以使用kubectl create或kubectl apply命令来创建DaemonSet。例如:
kubectl create -f daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image
ports:
- containerPort: 8080
Horizontal Pod Autoscaler(HPA)是一种能够自动调整Pod副本数量的控制器。它可以根据CPU利用率等指标自动扩展和缩减Pod副本数量。
可以使用kubectl autoscale命令来创建一个Horizontal Pod Autoscaler。例如:
kubectl autoscale deployment my-deployment --min=2 --max=5 --cpu-percent=80
Volume是一种抽象概念,用于将存储卷挂载到容器中。它可以将数据从一个Pod容器传递到另一个Pod容器,并支持持久化存储。
Persistent Volume(PV)是一种用于在多个Pod之间共享和持久化存储的Kubernetes对象。它可以捆绑到物理存储或云存储服务上。
可以使用kubectl create或kubectl apply命令来创建Persistent Volume。例如:
kubectl create -f pv.yaml
Storage Class是一种抽象概念,用于定义动态存储卷的属性。它可以在Kubernetes集群中动态地创建Persistent Volume。
可以使用kubectl create或kubectl apply命令来创建Storage Class。例如:
kubectl create -f storageclass.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/data
Ingress是一种用于将外部流量路由到Kubernetes集群内部服务的方法。它可以根据主机名、URL路径等规则进行路由。
可以使用kubectl create或kubectl apply命令来创建Ingress。例如:
kubectl create -f ingress.yaml
Network Policy是一种用于定义网络流量策略的Kubernetes对象。它可以控制Pod之间的流量,实现安全和隔离。
可以使用kubectl create或kubectl apply命令来创建Network Policy。例如:
kubectl create -f networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: my-domain.com
http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: my-service
port:
name: http
nginx.ingress.kubernetes.io/rewrite-target
注释修改请求URI路径,以便所有请求都指向后端Service的根路径。Service Account是一种用于管理Pod身份验证和访问控制的Kubernetes对象。它可以为Pod提供一组凭证,以便它们可以与其他服务进行通信。
可以使用kubectl create或kubectl apply命令来创建Service Account。例如:
kubectl create serviceaccount my-serviceaccount
Role是一种用于定义用户对Kubernetes资源的访问权限的Kubernetes对象。它可以控制用户对Pod、Service、ConfigMap等资源的访问。
可以使用kubectl create或kubectl apply命令来创建Role。例如:
kubectl create -f role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: my-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
RoleBinding是一种用于将角色与用户或组绑定在一起的Kubernetes对象。它可以授权用户执行与指定角色相关联的操作。
可以使用kubectl create或kubectl apply命令来创建RoleBinding。例如:
kubectl create -f rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-role-binding
roleRef:
kind: Role
name: my-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: my-serviceaccount
namespace: default
Cluster Role是一种用于定义用户对整个集群范围内资源的访问权限的Kubernetes对象。它可以控制用户对Namespace、Persistent Volume等资源的访问。
可以使用kubectl create或kubectl apply命令来创建Cluster Role。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: my-cluster-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: my-cluster-role-binding
roleRef:
kind: ClusterRole
name: my-cluster-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: my-serviceaccount
namespace: default