Kubernetes (K8s) 是一个开源的容器编排平台,用于自动部署、扩展和管理容器化应用程序。以下是 Kubernetes 的入门指南,涵盖了基本概念、安装、常用命令以及部署示例。
基本概念
- Pod:Kubernetes 中最小的可部署单元,一个 Pod 可以包含一个或多个容器。
- Node:运行 Pod 的机器,可以是物理机或虚拟机。
- Cluster:一组 Node 组成的集合,运行在 Kubernetes 控制平面下。
- Namespace:用于将资源分隔开的虚拟集群。
- Deployment:管理 Pod 的部署和缩放。
- Service:定义一组 Pod 的逻辑集合,并定义如何访问它们。
- ConfigMap 和 Secret:存储配置信息和敏感信息。
安装 Kubernetes
可以使用 Minikube 在本地机器上安装 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 实现,可以在本地运行单节点集群。
-
安装 Minikube 和 kubectl:
- 安装 Minikube
- 安装 kubectl
-
启动 Minikube:
minikube start
-
验证安装:
kubectl cluster-info
常用命令
-
创建 Pod
kubectl run mypod --image=nginx --restart=Never
-
查看 Pod
kubectl get pods
-
描述 Pod
kubectl describe pod mypod
-
删除 Pod
kubectl delete pod mypod
-
创建 Deployment
kubectl create deployment myapp --image=nginx
-
查看 Deployment
kubectl get deployments
-
扩展 Deployment
kubectl scale deployment myapp --replicas=3
-
暴露 Deployment
kubectl expose deployment myapp --type=NodePort --port=80
-
查看 Service
kubectl get services
部署示例
以下是一个简单的示例,展示如何在 Kubernetes 中部署一个 Nginx 应用。
-
创建 Deployment
apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deployment spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
将上述内容保存为
nginx-deployment.yaml
文件,然后应用该文件:kubectl apply -f nginx-deployment.yaml
-
创建 Service
apiVersion: v1 kind: Service metadata:name: nginx-service spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: NodePort
将上述内容保存为
nginx-service.yaml
文件,然后应用该文件:kubectl apply -f nginx-service.yaml
-
验证部署
查看 Pod、Deployment 和 Service 的状态:
kubectl get pods kubectl get deployments kubectl get services
通过 Minikube IP 访问 Nginx 服务:
minikube service nginx-service
进阶
-
ConfigMap 和 Secret
- 创建 ConfigMap:
kubectl create configmap my-config --from-literal=key1=value1
- 创建 Secret:
kubectl create secret generic my-secret --from-literal=password=my-password
- 创建 ConfigMap:
-
持久化存储 (Persistent Volumes and Persistent Volume Claims)
- 创建 Persistent Volume:
apiVersion: v1 kind: PersistentVolume metadata:name: my-pv spec:capacity:storage: 1GiaccessModes:- ReadWriteOncehostPath:path: "/mnt/data"
- 创建 Persistent Volume Claim:
apiVersion: v1 kind: PersistentVolumeClaim metadata:name: my-pvc spec:accessModes:- ReadWriteOnceresources:requests:storage: 1Gi
- 创建 Persistent Volume:
-
Ingress 控制器
- 创建 Ingress 资源以路由 HTTP 和 HTTPS 流量:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: example-ingress spec:rules:- host: example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-serviceport:number: 80
- 创建 Ingress 资源以路由 HTTP 和 HTTPS 流量:
通过这些步骤,您可以入门 Kubernetes 并开始在集群中部署和管理容器化应用程序。