zoukankan      html  css  js  c++  java
  • k8s单节点集群部署应用

      之所以用k8s来部署应用,就是因为k8s可以灵活的控制集群规模,进行扩充或者收缩。生产上我们要配置的参数较多,命令行的方式显然不能满足需求,我们应该使用基于配置文件的方式。接下来做一个部署的demo:
    -------------------------------------------------------------------------------------------------------------------------------
      场景:一个数据库,一个应用程序,数据库要暴露接口,并把数据挂载到物理机上,应用程序连接数据库,正常启动。
    数据库yaml文件:
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: db-service
      labels:
        name: db-service
    spec:
      replicas: 1
      template:  # template就是对pod对象的定义
        metadata: 
          labels: 
            name: db-service
        spec: 
          restartPolicy: Always
          containers:
            - name: db-service
              image: postgres:latest
              ports: 
                - containerPort: 5432
              volumeMounts:
              - name: data
                mountPath: /var/lib/postgresql/data  #容器中的路径
          volumes:
          - name: data
            hostPath:
              path: /Users/nm/Desktop/pgdata1  #物理机路径
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: db-service
      labels:
        name: db-service
    spec:
      type: NodePort
      ports:
      - nodePort: 30000  #对外端口
        port: 5432       #集群内部端口 
        targetPort: 5432 #对应的容器端口
        protocol: TCP
      selector:
        name: db-service
      需要注意的是各个name要统一(没理清究竟哪些要保持统一),挂载的卷,此示例是本机的写法,如果是其它机器的共享盘,应采用如下方式
    程序的yaml文件:
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: aaaa-service
      labels:
        name: aaaa-service
    spec:
      replicas: 1
      template:  # template就是对pod对象的定义
        metadata: 
          labels: 
            name: aaaa-service
        spec: 
          restartPolicy: Always
          containers:
            - name: aaaa-service
              image: aaaaapp:v3
              ports: 
                - containerPort: 80
                - containerPort: 8761
                - containerPort: 9080
                - containerPort: 9081
    
              volumeMounts:
              - name: startscript
                mountPath: /opt/config
          volumes:
          - name: startscript
            hostPath:
              path: /Users/nm/Desktop/deploy/web/config
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: aaaa-service
      labels:
        name: aaaa-service
    spec:
      type: NodePort
      ports:
        - nodePort: 30001
          port: 80
          name: nginx
          targetPort: 80
          protocol: TCP
        - nodePort: 30002
          port: 8761
          name: eureka
          targetPort: 8761
          protocol: TCP
        - nodePort: 31000
          port: 9080
          name: web
          targetPort: 9080
          protocol: TCP
        - nodePort: 31001
          port: 9081
          name: ms
          targetPort: 9081
          protocol: TCP
      selector:
        name: aaaa-service
      注意,程序中访问数据库的方式:jdbc:postgresql://db-service:5432/mytest,这个db-service就是上文中数据库的service的名字,在集群中会被kube-proxy解析为具体的集群内部ip。
    --------------------------------------------------
      需要吐槽的是mac上的docker for mac自带的k8s,由于docker-hyperkit这个组件的bug,仍然很难使用,会导致cpu暴涨。我本地是有三个pod,然后就卡死了:
      查了下,还挺多人有这个问题,官方的ssues也有不少人提这个bug,但,,,目前仍未修复,我的docker for mac版本是18.06.0
      k8s学习过程中,挺多的坑都是docker组件或者minikube的一些bug导致的,可能是在mac平台没怎么优化的问题吧。不得不说,这一点上,挺坑的。
    ------------------------------------------------
      生产环境部署完了,又碰到几个小坑:
      1、k8s不同版本的命令有差别,我本地1.10版本,起服务直接kubectl create -f 即可;服务器是1.5,需要kubectl -s  k8s的serverip:port create -f ;
        一开始不知道这个细节,还以为集群环境配错了,这个绕了一下;
      2、eureka的生产者配置,这个算是自己学艺不精留下的坑;如果服务要注册到eureka server上,供他人使用,需要eureka.instance.preferIpAddress=true;
        因为spring cloud默认是把机器名注册到eureka server了,而不是本机的ip,不配置这个,别的service从eureka拿到的实例地址是机器名称,会报host lost之类的错误(因为pod中的hosts文件里边没有配这个拿到的机器名)。
     
     

  • 相关阅读:
    java中的锁
    如何解决ORA-12547: TNS:lost contact错
    MVC Json 回报
    热12应建议网站模板(免费下载点)
    python爬行动物集合360联想词搜索
    Cocos2d-x 3.1.1 学习日志8--2分钟让你知道cocos2d-x3.1.1 文本类别
    两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】
    Android获得Manifest在<meta-data>元件的值
    40地点40投资者接下来的几年
    【编程之美】java二进制实现重建
  • 原文地址:https://www.cnblogs.com/nevermorewang/p/9569669.html
Copyright © 2011-2022 走看看