K8S初学小探 | 青训营

59 阅读3分钟

当你想要在 Kubernetes(K8s)上进行初步探索时,以下是一个适用于初学者的简单指南。这个指南将引导你了解如何在本地设置一个简单的 Kubernetes 集群,并运行一个简单的容器应用程序。

步骤 1:安装 K8S

Minikube 是一个工具,可以在本地创建一个单节点的 Kubernetes 集群,适合初学者进行学习和测试。

  1. 在命令行中执行以下步骤来安装 Minikube:

    curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    chmod +x minikube
    sudo mv minikube /usr/local/bin/
    
  2. 验证 Minikube 是否已安装并可以运行:

    minikube version
    

步骤 2:启动 Minikube 集群

  1. 在命令行中执行以下命令来启动 Minikube 集群:

    minikube start
    
  2. 验证 Minikube 是否正在运行:

    minikube status
    

步骤 3:运行一个简单的容器应用程序

  1. 创建一个名为 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
    
  2. 使用以下命令在 Minikube 集群中部署应用程序:

    kubectl apply -f hello-world.yml
    
  3. 验证应用程序是否已部署:

    kubectl get deployments
    
  4. 访问应用程序:

    minikube service hello-world-service
    

使用 Kubernetes 的 StatefulSet 来部署有状态的 MySQL 应用是一种常见的做法。StatefulSet 可以保证有状态应用的唯一性和稳定性。以下是如何使用 StatefulSet 部署有状态的 MySQL 应用,并开放 3306 端口,以及如何使用污点(Taint)来保证 MySQL 应用部署在特定的 Node 上的步骤:

步骤 1:创建 StatefulSet

  1. 创建一个名为 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
  1. 替换上面 YAML 文件中的相应字段,如 your-root-passwordyour-database-name 为你自己的值。同时,确保替换 your-storage-class 为你的存储类。

  2. 使用以下命令部署 StatefulSet:

kubectl apply -f mysql-statefulset.yaml

步骤 2:开放 3306 端口

  1. 创建一个名为 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
  1. 使用以下命令创建 Service:
kubectl apply -f mysql-service.yaml

步骤 3:使用 Taint 和 Toleration 保证 MySQL 应用部署在特定的 Node 上

  1. 根据需要,在你想要部署 MySQL 的 Node 上设置一个污点:
kubectl taint nodes <node-name> key=value:taint-effect

示例:

kubectl taint nodes node-1 mysql=true:NoSchedule
  1. 在 StatefulSet 的定义中,添加 tolerations 字段,以使 StatefulSet 的 Pod 能够容忍该污点:
spec:
  template:
    spec:
      tolerations:
      - key: mysql
        operator: "Equal"
        value: "true"
        effect: "NoSchedule"
  1. 使用以下命令更新 StatefulSet:
kubectl apply -f mysql-statefulset.yaml

通过上述步骤,你可以使用 StatefulSet 部署有状态的 MySQL 应用,并且通过 Service 开放 3306 端口,同时使用 Taint 和 Toleration 来确保 MySQL 应用部署在特定的 Node 上。这可以确保 MySQL 实例的稳定性和可靠性。请注意,上述步骤仅为示例,实际操作可能需要根据你的环境和需求进行微调。