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