• Docker & K8s学习记录


    Docker & K8s学习记录

    下载学习代码:

    https://github.com/kubeguide/K8sDefinitiveGuide-V4-Sourcecode
    

    启动mysql RC服务

    创建RC定义文件 mysql-rc.yaml

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: mysql   #RC名称,全局唯一
    spec:
      replicas: 1   #pod副本期待数量
      selector: 
        app: mysql  # 符合目标的pod拥有此标签
      template:     # 根据此模板创建pod副本
        metadata:
          labels:
            app: mysql  #pod 副本拥有的标签,对应RC的Selector
        spec:
          containers:   #pod 内容器的定义部分
          - name: mysql  #容器的名称
            image: mysql #容器对应的Docker Image
            ports:     
            - containerPort: 3306   #容器内应用监听的端口号
            env:										#注入容器内的环境变量
            - name: MYSQL_ROOT_PASSWORD  
              value: "123456"
    

    解析:

    • kind 属性用来表明此资源的类型。如ReplicationController 表明这是一个RC

    • spec 一节中是RC 的相关属性定义

    “当在集群中运行的Pod数量少于replicas时,RC会根据在spec.template一节中定义的Pod模板来生成一个新的Pod实例,spec.template.metadata.labels指定了该Pod的标签,需要特别注意的是:这里的labels必须匹配之前的spec.selector,否则此RC每创建一个无法匹配Label的Pod,就会不停地尝试创建新的Pod,陷入恶性循环中。”

    摘录来自: 龚正 等. “Kubernetes权威指南:从Docker到Kubernetes实践全接触。”

    roverliang@roverliangdeMac-mini study % kubectl create -f mysql-rc.yaml
    replicationcontroller/mysql created
    

    查看刚刚创建的RC

    roverliang@roverliangdeMac-mini study % kubectl get rc
    NAME    DESIRED   CURRENT   READY   AGE
    mysql   1         1         1       2m26s
    

    查看Pod的占用情况

    roverliang@roverliangdeMac-mini study % kubectl get pods
    NAME                              READY   STATUS    RESTARTS   AGE
    hello-minikube-64b64df8c9-x6gzz   1/1     Running   0          17h
    mysql-frrfx                       1/1     Running   0          3m35s
    

    启动 Mysql SVC 服务

    创建一个与之关联的Kubernetes Service-MySQL 的定义文件(文件名为mysql-svc.yaml)。完整的内容和解释如下:

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

    运行kubectl 命令,创建 Service

    roverliang@roverliangdeMac-mini study % kubectl get svc
    NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    hello-minikube   NodePort    10.107.208.178   <none>        8080:30011/TCP   17h
    kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP          17h
    mysql            ClusterIP   10.109.89.147    <none>        3306/TCP         5m15s
    

    MySQL服务被分配了一个值为10.109.89.147的Cluster IP地址。随后,Kubernetes集群中其他新创建的Pod就可以通过ServiceCluster IP+端口号3306来连接和访问它了。”

    通常,Cluster IP是在Service创建后由Kubernetes系统自动分配的,其他Pod无法预先知道某个ServiceCluster IP地址,因此需要一个服务发现机制来找到这个服务。

    为此,最初时,Kubernetes巧妙地使用了Linux环境变量(Environment Variable)来解决这个问题,后面会详细说明其机制。现在只需知道,根据Service的唯一名称,容器可以从环境变量中获取Service对应的Cluster IP地址和端口,从而发起TCP/IP连接请求。

    启动Tomcat 应用

    1. 创建 myweb-rc.yaml配置文件
    
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: myweb
    spec:
      replicas: 5
      selector:
        app: myweb
      template:
        metadata:
          labels:
            app: myweb
        spec:
          containers:
          - name: myweb
            image: kubeguide/tomcat-app:v1
            ports:
            - containerPort: 8080
            env:
            - name: MYSQL_SERVICE_HOST
              value: 'mysql'
            - name: MYSQL_SERVICE_PORT
              value: '3306'
    
    1. 创建 myweb-rc
    roverliang@roverliangdeMac-mini study % kubectl create -f myweb-rc.yaml
    replicationcontroller/myweb created
    
    1. 获取创建的myweb pod
    # 创建中
    roverliang@roverliangdeMac-mini study % kubectl get pods
    NAME                              READY   STATUS              RESTARTS   AGE
    hello-minikube-64b64df8c9-x6gzz   1/1     Running             0          17h
    mysql-frrfx                       1/1     Running             0          19m
    myweb-49scc                       0/1     ContainerCreating   0          26s
    myweb-54brv                       0/1     ContainerCreating   0          26s
    myweb-9jv2z                       0/1     ContainerCreating   0          26s
    myweb-jcjpz                       0/1     ContainerCreating   0          26s
    myweb-t5hc6                       0/1     ContainerCreating   0          26s
    
    # 创建完成
    roverliang@roverliangdeMac-mini study % kubectl get pods
    NAME                              READY   STATUS    RESTARTS   AGE
    hello-minikube-64b64df8c9-x6gzz   1/1     Running   0          18h
    mysql-frrfx                       1/1     Running   0          25m
    myweb-49scc                       1/1     Running   0          6m5s
    myweb-54brv                       1/1     Running   0          6m5s
    myweb-9jv2z                       1/1     Running   0          6m5s
    myweb-jcjpz                       1/1     Running   0          6m5s
    myweb-t5hc6                       1/1     Running   0          6m5s
    
    1. 创建myweb-svc 服务

    创建myweb-svc.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: myweb
    spec:
      type: NodePort
      ports:
        - port: 8080
          nodePort: 30001
      selector:
        app: myweb
    

    创建svc 服务

    roverliang@roverliangdeMac-mini study % kubectl create -f myweb-svc.yaml
    service/myweb created
    

    查看Service

    roverliang@roverliangdeMac-mini study % kubectl get services
    NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    hello-minikube   NodePort    10.107.208.178   <none>        8080:30011/TCP   18h
    kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP          18h
    mysql            ClusterIP   10.109.89.147    <none>        3306/TCP         43m
    myweb            NodePort    10.100.49.129    <none>        8080:30001/TCP   63s
    

    经过上面的几个步骤,我们终于成功实现了Kubernetes上第1个例子的部署搭建工作。现在一起来见证成果吧!在你的笔记本上打开浏览器,输入

    http://127.0.0.1:30001/demo/

    比如虚拟机IP为192.168.18.131(可以通过#ip a命令进行查询),在浏览器里输入地址http://127.0.0.1:30001/demo/后,可以看到如图1.2所示的网页界面。

  • 相关阅读:
    sqlplus中文问号
    mysql8.0 Authentication plugin 'caching_sha2_password' cannot be loaded
    Idea2018激活
    bzoj-5049-线段树
    HDU-6070-二分+线段树
    Aizu-2200-floyd+dp
    bzoj-4565-区间dp+状压
    bzoj-3195-状压dp
    bzoj-4870-组合dp+矩阵幂
    swiper使用心得
  • 原文地址:https://www.cnblogs.com/roverliang/p/13434586.html
Copyright © 2020-2023  润新知