当你想要在 Kubernetes(K8s)上进行初步探索时,以下是一个适用于初学者的简单指南。这个指南将引导你了解如何在本地设置一个简单的 Kubernetes 集群,并运行一个简单的容器应用程序。
步骤 1:安装 K8S
Minikube 是一个工具,可以在本地创建一个单节点的 Kubernetes 集群,适合初学者进行学习和测试。
-
在命令行中执行以下步骤来安装 Minikube:
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 chmod +x minikube sudo mv minikube /usr/local/bin/ -
验证 Minikube 是否已安装并可以运行:
minikube version
步骤 2:启动 Minikube 集群
-
在命令行中执行以下命令来启动 Minikube 集群:
minikube start -
验证 Minikube 是否正在运行:
minikube status
步骤 3:运行一个简单的容器应用程序
-
创建一个名为
hello-world.yml的 YAML 文件,其中包含一个 Deployment 和一个 Service:apiVersion: apps/v1 kind: Deployment metadata: name: hello-world-deployment spec: replicas: 2 selector: matchLabels: app: hello-world template: metadata: labels: app: hello-world spec: containers: - name: hello-world-container image: hello-world --- apiVersion: v1 kind: Service metadata: name: hello-world-service spec: selector: app: hello-world ports: - protocol: TCP port: 80 targetPort: 80 -
使用以下命令在 Minikube 集群中部署应用程序:
kubectl apply -f hello-world.yml -
验证应用程序是否已部署:
kubectl get deployments -
访问应用程序:
minikube service hello-world-service
使用 Kubernetes 的 StatefulSet 来部署有状态的 MySQL 应用是一种常见的做法。StatefulSet 可以保证有状态应用的唯一性和稳定性。以下是如何使用 StatefulSet 部署有状态的 MySQL 应用,并开放 3306 端口,以及如何使用污点(Taint)来保证 MySQL 应用部署在特定的 Node 上的步骤:
步骤 1:创建 StatefulSet
- 创建一个名为
mysql-statefulset.yaml的 YAML 文件,其中包含 StatefulSet 的定义:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
replicas: 1
serviceName: mysql
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:latest
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "your-root-password"
- name: MYSQL_DATABASE
value: "your-database-name"
volumeClaimTemplates:
- metadata:
name: mysql-pv-claim
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: your-storage-class
resources:
requests:
storage: 1Gi
-
替换上面 YAML 文件中的相应字段,如
your-root-password和your-database-name为你自己的值。同时,确保替换your-storage-class为你的存储类。 -
使用以下命令部署 StatefulSet:
kubectl apply -f mysql-statefulset.yaml
步骤 2:开放 3306 端口
- 创建一个名为
mysql-service.yaml的 YAML 文件,其中包含 Service 的定义,用于暴露 StatefulSet 内的 MySQL 容器:
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
- 使用以下命令创建 Service:
kubectl apply -f mysql-service.yaml
步骤 3:使用 Taint 和 Toleration 保证 MySQL 应用部署在特定的 Node 上
- 根据需要,在你想要部署 MySQL 的 Node 上设置一个污点:
kubectl taint nodes <node-name> key=value:taint-effect
示例:
kubectl taint nodes node-1 mysql=true:NoSchedule
- 在 StatefulSet 的定义中,添加
tolerations字段,以使 StatefulSet 的 Pod 能够容忍该污点:
spec:
template:
spec:
tolerations:
- key: mysql
operator: "Equal"
value: "true"
effect: "NoSchedule"
- 使用以下命令更新 StatefulSet:
kubectl apply -f mysql-statefulset.yaml
通过上述步骤,你可以使用 StatefulSet 部署有状态的 MySQL 应用,并且通过 Service 开放 3306 端口,同时使用 Taint 和 Toleration 来确保 MySQL 应用部署在特定的 Node 上。这可以确保 MySQL 实例的稳定性和可靠性。请注意,上述步骤仅为示例,实际操作可能需要根据你的环境和需求进行微调。