暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

每天五分钟学K8(一):基础概念及部署mysql

CodingWithFun 2019-09-13
1257

一、Kubernetes架构


Kubernetes由以下几大组件组成:

  • Master:  集群的控制节点,运行着一组关键进程,包括api-server、controller-manger、scheduler,集群所有数据保存在etcd中。

  • Node: master以外,集群其他节点称为node节点,是Kubenetes集群中的工作负载节点。每个Node节点也运行着一组进程,包括kubelet,kube-proxy。


二、Kubenetes基础概念

  • Pod:Kubernetes最下调度单位,代表着在集群中运行的一组进程,意味着pod中可包含多个容器。Pod中首先启动的是pause容器,用于创建网络,挂载文件等,最终的逻辑形态如下:

  • 控制器:用于控制Pod的副本数量,包括ReplicationController、Deployment、ReplicaSet、StatefulSet、Job; 

  • Service:类似于微服务架构中的一个"微服务",是建立在一组Pod之上的资源抽象,并为这组Pod提供了Cluster IP,上游应用通过这个IP访问这组Pod组成的集群实例。


二、部署mysql实例

下面我们通过一个实例体验一下Kubernetes的使用。创建mysql-rc.yaml文件,输入以下内容:

    apiVersion: v1
    kind: ReplicationController # 副本控制器
    metadata:
    name: mysql # RC的名称,全局唯一


    spec:
    replicas: 1 # Pod的副本数量
    selector:
    app: mysql # 拥有此标签的Pod归属此RC
    template:
    metadata:
    labels:
    app: mysql # Pod拥有的标签,必须与select一致
    spec:
    containers: # Pod容器的定义
    - name: mysql # 定义镜像
    image: mysql
    ports:
    - containerPort: 3306 # 容器暴露的端口
    env: # 设置容器的环境变量
    - name: MYSQL_ROOT_PASSWORD
    value: "123456"


    关键字段解释:

    • kind:表示资源对象的类型;

    • metadata.name: 资源对象的名称,需全局唯一

    • spec.replicas: 所关联Pod的副本数量

    • spec.selector.app: 指定归属该对象的Pod标签

    • spec.selector.template:Pod的标签及容器信息


    创建好后,将其发布到集群,在集群Master节点执行:

      kubectl create -f mysql-rc.yaml  # 创建RC


      # 如果想管理RC可执行如下命令
      $ kubectl get rc                   # 查看创建的RC
      $ kubectl delete rc mysql    # 删除创建的RC,同时会删除关联的P


      创建好mysql的Pod后,它并不能很好的对外提供服务,因为Pod重启后IP会发生变化,为此我们需要Service对象。


      创建mysql-svc.yaml文件:

        apiVersion: v1
        kind: Service  #表明是Service对象
        metadata:
        name: mysql # Service的全局唯一的名称
        spec:
        ports: # Service提供服务的端口
        - port: 3306
        selector:
        app: mysql # Service对应的Pod拥有的标签


        完成后即可在Master节点发布:

          kubectl create -f mysql-svc.yaml


          每个Service都会分配一个Cluster IP,并且一旦分配不会再改变,这样上游应用就可以始终用这个IP进行服务的访问了。

          查看Cluster IP的方法是:

            [root@henghe-101-112 ~]# kubectl get svc
            NAME             TYPE        CLUSTER-IP      EXTERNAL-IP       PORT(S)          AGE
            mysql            ClusterIP   10.43.155.169   <none>            3306/TCP         4m48s
            文章转载自CodingWithFun,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论