Skip to content

操作实践

Kubernetes 实践

部署MySQL服务

使用 kubernetes 部署 MySQL 是十分方便的,只要定义好资源文件,即可快速部署服务。
首先新建 MySQL 的 Replication Controller 资源文件 mysql-rc.yaml :

apiVersion: v1               #描述RC对象的版本是v1
kind: ReplicationController    #申明RC对象
metadata:                        #metadata中的是对此RC对象描述信息
  name: mysql-rc               #此RC对象在default命名空间中名为mysql-rc,同一个命名空间中的命名一定是不同的
  labels:                   #对该RC对象添加标签
    name: mysql-rc              #添加标签name,标签的值为mysql-rc
spec:                           #spec中是对RC对象的具体描述
  replicas: 5                  #我要创建5个副本,单位是pod
  selector:                    #选择器,用于选择对象
    name: mysql-pod             #使该RC只会选择标签为name: mysql-rc的pod
  template:                      #模版,以下用来描述创建的pod的模版
    metadata:                     # 对pod模版描述的元数据
      labels: 
        name: mysql-pod            #给pod也添加标签
    spec:                           #pod的具体描述
      containers:                  #放入pod中的容器的模板
      - name: mysql                  #容器名为mysql
        image: mysql                    #容器使用的镜像为mysql镜像
        imagePullPolicy: IfNotPresent    #镜像拉取的策略,IfNotPresent是仅当镜像不存在本地才拉取镜像
        ports:             
        - containerPort: 3306           #设置容器端口号为3306  
        env:        #给该容器设置环境变量,mysql容器必须设置PASSWORD环境变量,否则容器会出错
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"

然后新建 MySQL 的 Service 资源文件 mysql-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
  labels: 
    name: mysql-svc
spec:
  type: NodePort    #设定service的端口类型是NodePort
  ports:
  - name: http      #设定端口的名称,常用于多端口情况
    protocol: TCP    #设定通讯协议为TCP
    port: 3306
    targetPort: 3306    #设定targetPort为3306
    nodePort: 33306     #设定nodePort为33306
  selector:
    name: mysql-pod

定义两个资源文件后,即可开始启动 RC 和 Service。
在控制台运行 kubectl create -f mysql-rc.yamlkubectl create -f mysql-svc.yaml 之后,MySQL 的服务就部署完成了。 MySQL 的地址是:节点ip:33306 。使用这个地址即可与 MySQL 进行连接交互了。

部署 Kafka

这里介绍一下单节点的 Kafka 部署,首先在创建 kafka 之前需要创建 zookeeper 服务 zookeeper-svc.yaml :

apiVersion: v1
kind: Service
metadata:
  labels:
    app: zookeeper-service
  name: zookeeper-service
spec:
  ports:
  - name: zookeeper-port
    port: 2181
    targetPort: 2181
  selector:
    app: zookeeper

和 zookeeper-deployment.yaml 。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: zookeeper
  name: zookeeper
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: zookeeper
    spec:
      containers:
      - image: wurstmeister/zookeeper
        imagePullPolicy: IfNotPresent
        name: zookeeper
        ports:
        - containerPort: 2181

之后用 kubectl 创建 zookeeper 服务,等 pod 跑起来, service 的 endpoint 配置成功后,就可以继续创建 kafka 的服务 kafka-svc.yaml:

apiVersion: v1
kind: Service
metadata:
  name: kafka-service
  labels:
    app: kafka
spec:
  type: NodePort
  ports:
  - port: 9092
    name: kafka-port
    targetPort: 9092
    nodePort: 30092
    protocol: TCP
  selector:
    app: kafka

kafka-deployment.yaml:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: kafka-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      name: kafka
  template:
    metadata:
      labels:
        name: kafka
        app: kafka
    spec:
      containers:
      - name: kafka
        image: wurstmeister/kafka
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9092
        env:
        - name: KAFKA_ADVERTISED_PORT
          value: "9092"
        - name: KAFKA_ADVERTISED_HOST_NAME
          value: "[kafka的service的clusterIP]"
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: [zookeeper的service的clusterIP]:2181
        - name: KAFKA_BROKER_ID
          value: "1"

同样使用 kubectl 创建服务即可。

部署 2048

与之前一样,创建 yaml 文件 2048.yaml :

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test-2048
  labels:
    app: test-2048
spec:
  template:
    metadata:
      name: test-2048
      labels:
        app: test-2048
    spec:
      containers:
      - name: test-2048
        image: daocloud.io/daocloud/dao-2048:latest
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: "0.05"
            memory: "50000000"
---         #分隔线,分割不同资源的设定
apiVersion: v1
kind: Service
metadata:
  name: test-2048
spec:
  type: NodePort
  ports:
  - port: 80
  selector:
    app: test-2048

这里将不同资源的设定放置到同一文件内,之后使用 kubectl 创建服务即可。