基于 Cluster API 管理集群

前言

Kubernetes Cluster API 提供了一种声明式的集群创建、配置、管理模式,能够对集群的全生命周期进行有效管理(https://cluster-api.sigs.k8s.io/introduction.html)本文提供简单试用记录。

准备 Kubernetes 集群(管理集群)
节点操作系统IPDocker 版本kubernetes 版本网络
node-01Ubuntu 18.04.1 LTS192.168.137.13119.03.1v1.17.1Calico v3.7.3
node-02Ubuntu 18.04.1 LTS192.168.137.9919.03.1v1.17.1Calico v3.7.3

管理集群安装命令笔记:

(node-01) # kubeadm init --pod-network-cidr=192.200.0.0/16
(node-01) # mkdir -p $HOME/.kube
(node-01) # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
(node-01) # wget https://docs.projectcalico.org/v3.11/manifests/calico.yaml
(node-01) # sed -i "s/192.168/192.200/g" calico.yaml
(node-01) # kubectl apply -f calico.yaml
(node-02) # kubeadm join 192.168.137.131:6443 --token xxx   --discovery-token-ca-cert-hash sha256:xxx
部署 Cluster API Controller
(node-01) # kubectl create -f https://github.com/kubernetes-sigs/cluster-api/releases/download/v0.2.9/cluster-api-components.yaml
部署 Bootstrap Provider (cluster-api-bootstrap-provider-kubeadm

通过 watchprocess KubeadmConfig Cluster Machine 对象,实现对集群机器的配置

(node-01) # kubectl create -f https://github.com/kubernetes-sigs/cluster-api-bootstrap-provider-kubeadm/releases/download/v0.1.5/bootstrap-components.yaml
部署 Infrastructure Provider (cluster-api-provider-docker

通过 watchprocess DockerCluster DockerMachine Cluster Machine 来供应基础设施

(node-01) # kubectl create -f https://github.com/kubernetes-sigs/cluster-api-provider-docker/releases/download/v0.2.1/provider-components.yaml
创建一个单节点 Kubernetes 集群
  • 创建 Cluster 对象,指定后端使用 DockerCluster

    准备部署文件 cluster.yaml

apiVersion: cluster.x-k8s.io/v1alpha2
kind: Cluster
metadata:
  name: capi-quickstart
spec:
  clusterNetwork:
    pods:
      cidrBlocks: ["192.200.0.0/16"]
  infrastructureRef:
    apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2
    kind: DockerCluster
    name: capi-quickstart
---
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2
kind: DockerCluster
metadata:
  name: capi-quickstart
(node-01) # kubectl apply -f cluster.yaml
  • 创建 Machine 对象,指定使用 DockerMachine 供应机器,使用 KubeadmConfig 进行节点配置

    准备部署文件 machine.yaml

apiVersion: cluster.x-k8s.io/v1alpha2
kind: Machine
metadata:
  name: capi-quickstart-controlplane-0
  labels:
    cluster.x-k8s.io/control-plane: "true"
    cluster.x-k8s.io/cluster-name: "capi-quickstart"
spec:
  version: v1.15.3
  bootstrap:
    configRef:
      apiVersion: bootstrap.cluster.x-k8s.io/v1alpha2
      kind: KubeadmConfig
      name: capi-quickstart-controlplane-0
  infrastructureRef:
    kind: DockerMachine
    apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2
    name: capi-quickstart-controlplane-0
---
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2
kind: DockerMachine
metadata:
  name: capi-quickstart-controlplane-0
---
apiVersion: bootstrap.cluster.x-k8s.io/v1alpha2
kind: KubeadmConfig
metadata:
  name: capi-quickstart-controlplane-0
spec:
  initConfiguration:
    nodeRegistration:
      kubeletExtraArgs:
        # Default thresholds are higher to provide a buffer before resources
        # are completely depleted, at the cost of requiring more total
        # resources. These low thresholds allow running with fewer resources.
        # Appropriate for testing or development only.
        eviction-hard: nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%
  clusterConfiguration:
    networking:
      serviceSubnet: "10.96.0.0/12"
      podSubnet: "192.200.0.0/16"
      dnsDomain: "cluster.local"
    controllerManager:
      extraArgs:
        # Enables dynamic storage provisioning without a cloud provider.
        # Appropriate for testing or development only.
        enable-hostpath-provisioner: "true"
(node-01) # kubectl apply -f machine.yaml
  • 查看集群状态
(node-01) # kubectl get cluster
NAME              PHASE
capi-quickstart   provisioned
(node-01) # kubectl get machine
NAME                             PROVIDERID                                                  PHASE
capi-quickstart-controlplane-0   docker:capi-quickstart-capi-quickstart-controlplane-0   running
访问新创建的集群

获取新集群的 kubeconfig 文件

(node-01) # kubectl --namespace=default get secret/capi-quickstart-kubeconfig -o json \
  | jq -r .data.value \
  | base64 --decode \
  > ./capi-quickstart.kubeconfig

注意:执行下面步骤时,需要到 capi-quickstart-controlplane-0 所在宿主机执行,实验中是 node-02,因此需要提前将 capi-quickstart.kubeconfig 拷贝到对应主机:

(node-02) # kubectl --kubeconfig=./capi-quickstart.kubeconfig apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
(node-02) # kubectl --kubeconfig=./capi-quickstart.kubeconfig get node
NAME                                             STATUS   ROLES    AGE   VERSION
capi-quickstart-capi-quickstart-controlplane-0   Ready    master   32m   v1.15.3

新集群的节点状态已经 Ready

到这里,我们已经能够对新建集群使用 kubectl 进行常规操作,后续再介绍集群扩容等高级特性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要基于 Kubernetes 部署 MySQL 集群,可以使用 StatefulSet 来管理 MySQL 的实例。以下是一个简单的部署 MySQL 集群的示例。 1. 创建 StatefulSet 首先,你需要创建一个 StatefulSet,它将负责管理 MySQL 实例的创建和维护。在 StatefulSet 中,你需要定义一个容器模板,用于创建每个 MySQL 实例的容器。 ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: mysql replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: rootpassword ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim ``` 在上面的 YAML 文件中,我们定义了一个名为 mysql 的 StatefulSet,并指定了服务名称为 mysql。我们还指定了 3 个副本,因此 StatefulSet 将创建三个 MySQL 实例。我们还定义了一个容器模板,该模板使用 MySQL 5.7 镜像,并将 MySQL 的 root 密码设置为 rootpassword。容器模板还定义了一个名为 mysql 的端口,并将 /var/lib/mysql 挂载到名为 mysql-persistent-storage 的持久卷上。 2. 创建 PersistentVolumeClaim 接下来,我们需要创建一个 PersistentVolumeClaim(PVC)用于持久化 MySQL 的数据。在 Kubernetes 中,PVC 用于声明需要的存储资源,并由 Kubernetes 自动创建相应的 PersistentVolume(PV)。在下面的 YAML 文件中,我们创建了一个名为 mysql-pv-claim 的 PVC。 ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` 在上面的 YAML 文件中,我们定义了一个名为 mysql-pv-claim 的 PVC,并请求 10GB 存储空间。 3. 创建 Service 最后,我们需要创建一个 Service,用于将客户端请求路由到正确的 MySQL 实例。在下面的 YAML 文件中,我们创建了一个名为 mysql 的 Service。 ```yaml apiVersion: v1 kind: Service metadata: name: mysql spec: clusterIP: None selector: app: mysql ports: - name: mysql port: 3306 ``` 在上面的 YAML 文件中,我们定义了一个名为 mysql 的 Service,并将其类型设置为 ClusterIP。我们还指定了一个名为 mysql 的端口,并将其映射到 MySQL 容器的 3306 端口。最后,我们使用 selector 将 Service 与 StatefulSet 关联起来。 4. 运行 YAML 文件 现在,你可以运行上面的 YAML 文件,以创建 MySQL 集群。使用以下命令运行 YAML 文件。 ```shell kubectl apply -f mysql.yaml ``` 这将创建一个名为 mysql 的 StatefulSet、一个名为 mysql-pv-claim 的 PVC 和一个名为 mysql 的 Service。 完成后,你可以使用以下命令检查 StatefulSet 是否正确运行。 ```shell kubectl get statefulset mysql ``` 你可以使用以下命令检查 MySQL 实例是否正确创建。 ```shell kubectl get pods -l app=mysql ``` 最后,使用以下命令获取 Service 的 Cluster IP。 ```shell kubectl get svc mysql ``` 现在,你可以使用 Cluster IP 连接到 MySQL 集群并执行查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值