当你想要在 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
kubectl apply -f mysql-service.yaml
步骤 3:使用 Taint 和 Toleration 保证 MySQL 应用部署在特定的 Node 上
kubectl taint nodes key=value:taint-effect
示例:
kubectl taint nodes node-1 mysql=true:NoSchedule
tolerations
字段,以使 StatefulSet 的 Pod 能够容忍该污点:spec:
template:
spec:
tolerations:
- key: mysql
operator: "Equal"
value: "true"
effect: "NoSchedule"
kubectl apply -f mysql-statefulset.yaml
通过上述步骤,你可以使用 StatefulSet 部署有状态的 MySQL 应用,并且通过 Service 开放 3306 端口,同时使用 Taint 和 Toleration 来确保 MySQL 应用部署在特定的 Node 上。这可以确保 MySQL 实例的稳定性和可靠性。请注意,上述步骤仅为示例,实际操作可能需要根据你的环境和需求进行微调。