Kubernetes(通常缩写为 K8s)是一个用于自动化部署、扩展和管理容器化(通常是 Docker 容器)应用程序的开源平台。以下是一些 Kubernetes 的核心概念和相关的命令。
1. 集群(Cluster)和节点(Nodes)
集群是 Kubernetes 的基础单元,由一组节点(物理或虚拟机)组成。
命令:
kubectl get nodes
解析:
列出集群中所有的节点。
2. Pod
Pod 是 Kubernetes 的最小部署单元,通常托管一个或多个容器。
命令:
kubectl run nginx --image=nginx
kubectl get pods
解析:
- 运行一个名为 nginx 的 Pod,并使用 nginx 镜像。
- 列出所有的 Pod。
3. Service
Service 是一个抽象层,用于暴露 Pod 的网络服务。
命令:
kubectl expose pod nginx --port=80 --type=ClusterIP
kubectl get svc
解析:
- 使用
ClusterIP
类型暴露 nginx Pod 在端口 80 上的服务。 - 列出所有的 Service。
4. Deployment
Deployment 用于声明应用程序的期望状态,并由 Kubernetes 自动确保。
命令:
kubectl create deployment nginx-deploy --image=nginx
kubectl get deployments
解析:
- 创建一个名为
nginx-deploy
的 Deployment。 - 列出所有的 Deployment。
5. ConfigMap 和 Secret
用于管理配置数据和敏感信息。
命令:
kubectl create configmap my-config --from-literal=key1=value1
kubectl create secret generic my-secret --from-literal=password=mypassword
解析:
- 创建一个 ConfigMap。
- 创建一个 Secret。
6. 命名空间(Namespaces)
用于将资源分隔到逻辑上的独立区域。
命令:
kubectl create namespace my-namespace
解析:
创建一个新的命名空间。
7. Volume
用于持久化存储。
命令:
kubectl apply -f my-volume.yaml
解析:
通过 YAML 文件定义一个 Volume,并用 kubectl apply
命令来创建它。
8. Horizontal Pod Autoscaler (HPA)
自动根据 CPU 使用率或其他指标来扩展 Pod 的数量。
命令:
kubectl autoscale deployment nginx-deploy --min=2 --max=5 --cpu-percent=80
解析:
自动缩放名为 nginx-deploy
的 Deployment,根据 CPU 使用率。
9. 自定义资源(CRDs)
用于扩展 Kubernetes API。
命令:
kubectl apply -f my-custom-resource.yaml
解析:
使用 kubectl apply
创建自定义资源。
10. Helm
Helm 是 Kubernetes 的包管理器。
命令:
helm install my-release my-chart
解析:
使用 Helm 安装一个名为 my-release
的 Helm Chart。
【提醒】高级的 Kubernetes 功能如 DaemonSets、StatefulSets、Network Policies 等都有其特定的使用场景。以下是这些高级特性的一些基本解释和示例。
1. DaemonSets
DaemonSet 确保在每个节点上都运行一个 Pod 的副本,通常用于运行集群范围内的守护进程。
命令:
kubectl apply -f daemonset.yaml
解析:
使用一个包含 DaemonSet 配置的 YAML 文件来创建 DaemonSet。
示例 daemonset.yaml:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: my-daemonset
template:
metadata:
labels:
app: my-daemonset
spec:
containers:
- name: my-daemon
image: my-daemon-image
2. StatefulSets
StatefulSets 是用于管理有状态应用的工作负载 API 对象。
命令:
kubectl apply -f statefulset.yaml
解析:
使用一个包含 StatefulSet 配置的 YAML 文件来创建 StatefulSet。
示例 statefulset.yaml:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
3. Network Policies
Network Policies 是一种 Kubernetes 资源,用于控制 Pod 之间的通信。
命令:
kubectl apply -f network-policy.yaml
解析:
使用一个包含 Network Policy 配置的 YAML 文件来创建 Network Policy。
示例 network-policy.yaml:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
这个示例定义了一个拒绝所有进入(Ingress)流量的 Network Policy。
以上仅为各个高级功能的基础示例。它们都有更多高级和复杂的用法,建议查阅官方文档以获得详细和全面的指导。