• day08 spinnaker


    1.Elk stack

    filebeat要先于业务容器启动完成,要不丢日志

    扩展知识:
    边车模式,共享网络名称空间,可以业务容器的脚本里今判断,filebeat起来后,我再把自己的程序拉起来

    2.云计算的模型

    • Iaas是云服务的最底层,主要提供基础资源(只提供了一个厨房,自己要做的细节还是很多的)
    • paas是提供软件部署平台(runtime),抽象掉了硬件和操作系统细节,可以无缝扩展scaling,开发者只需要关注自己的业务逻辑,不需要关注底层(现在的趋势是走paas,不是做iaas和saas,现在提供云服务的厂商都是提供paas平台)
    • saas 是软件的开发,管理,部署都交给第三方,不需要关心技术细节,拿来即用(出门必胜客,披萨套餐)
      模型解析

    3.Kubernetes

    kubernetes不是传统的paas(平台及服务)系统
    颠覆了paas的概念,企业要的是一个paas平台
    最小的基础设施成本+人力成本,构建自己的团队

    越来越多厂商,基于k8s构建paas平台云

    亲云,阿里云厂商里面的kubernetes里面的产品底层其实就是一套kubernetes环境的安装sh脚本,然后ansible去跑一下.提供的基于k8s的paas平台

    4.说明

    • 越来越多的云计算厂商,正在构建基于k8s构建paas平台
    • 获得paas能力的几个必要条件:
      • 统一应用的运行环境(docker)
      • 有Iaas能力(K8S)
      • 有可靠的中间件集群,数据库集群(DBA主要工作)
      • 有分布式存储集群(存储工程师的主要工作)
      • 有适配的监控,日志系统(Prometheus,ELK)
      • 有完善的CI,CD系统(Jenkins,CD是持续部署,将docker镜像转到服务器上运行起来)
    • 常见的自研K8S的CD系统
      • 自研
      • Argo CD(基于gitlab)
      • OpenShift(红帽发布的企业级paas平台,也是基于k8s)
      • Spinnaker(完全开源,但是有些复杂)

    PV,PVC 扩展,实例化sat存储,直接接入k8s就可以使用

    k8s具有的能力

    • 网络编排能力
    • 存储编排能力
    • 运算资源编排能力
    • 容器生命周期编排能力

    k8s的高级特性

    • 容器的就绪性探针
    • 容器的存活性探针
    • 启动后的钩子函数
    • 启动前的钩子函数

    5.Spinnaker

    netflix开源的持续交付平台

    5.1 集群管理

    管理云资源,Spinnaker所说的云可以理解为AWS,即主要是Iaas资源,比如OpenStack,Google云

    5.2 部署管理

    负责将jenkins流水线创建的镜像,部署到kubernetes集群中去,让服务真正的运行起来

    5.3 架构

    image
    sinnaker也是基于spring cloud 的一套微服务,里面没有关系型数据库

    Deck: 是一套完全独立的前端静态项目,基于angulJs写的前端页面
    Gate: 整个Sinnaker的Api 网关,用户接口和api调用者都要通过gate进行通信(是心脏的角色)
    Custom Script/API Caller: 调用者
    Fiat: 是sinnaker里面的认证服务,提供身份认证,可以接ldap的
    Clouddriver: 云驱动,驱动底层云计算的引擎.(大脑的角色)
    Front50: 管理数据持久化的组件,用redis做缓存,后面接了一个对象存储oss(默认是接s3的)
    minio: 是对象存储的组件,负责数据存储的组件
    orca: 任务编排引擎
    resco: 原始虚拟机kvm,微软虚拟机要用
    Kayenta: 金丝雀分析,用不到的
    echo: 信息通信的总线,用来发消息的
    igor: 用来和jenkins通信的,如果要调用jenkins的接口就依赖igor,用来和ci系统整合的
    Halyard CLI: spinnaker的脚手架工具
    Halyard Daemon: 安装部署spinnaker的工具

    6.Spinnaker的Armory发行版

    harbor中穿件armory的仓库,私有的

    6.1 部署minio

    minio带了http接口可以上传和下载文件

    [root@jdss7-200]# docker pull docker.io/minio/minio:latest
    [root@jdss7-200]# docker images | grep minio
    [root@jdss7-200]# docker tag xxxxxx harbor.od.com/armory/minio:latest
    [root@jdss7-200]# docker push harbor.od.com/armory/minio:latest
    [root@jdss7-200]# cd /data/k8s-yaml/
    [root@jdss7-200]# mkdir -p armory
    [root@jdss7-200]# cd armory
    

    dp.yaml

    kind: Deployment
    apiVersion: extensions/v1beta1
    metadata:
      name: minio
      namespace: armory
      labels:
        name: minio
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: minio
      revisionHistoryLimit: 7
      progressDeadlineSeconds: 600  
      template:
        metadata:
          labels:
            app: minio
            name: minio
        spec:
          containers:
          - name: minio
            image: harbor.od.com/armory/minio:latest
            imagePullPolicy: Always
            ports:
            - containerPort: 9000
              protocol: TCP
            args:
            - server
            - /data        
            env:
            - name: MINIO_ACCESS_KEY
              value: admin
            - name: MINIO_SECRET_KEY
              value: admin123    
            readlinessProbe:
              failureThreshold: 3
              httpGet:
                path: /minio/health/ready
                port: 9000
                scheme: HTTP
              initialDelaySeconds: 10
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 5
            volumeMounts:
            - mountPath: /data
              name: data        
          imagePullSecrets:
          - name: harbor
          volumes:
          - nfs:
              server: jdss7-200
              path: /data/nfs-volume/minio
            name: data
    

    svc.yaml

    kind: Service
    apiVersdion: v1
    metadata:
      name: minio
      namespace: armory
    spec:
      selector:
        app: minio
      ports:
        - port: 80
          targetPort: 9000
          protocol: TCP
    

    ingress.yaml

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: minio
      namespace: armory
    spec:
      rules:
      - host: minio.od.com
        http:
          paths:
          - path: /
            backend:
              serviceName: minio
              servicePort: 80
    

    dns上解析域名minio.od.com
    创建armory的名称空间
    [root@jdss7-21]# kubectl create ns armory
    创建一个secret,用于在armory名称空间里,去有权限拉取私有仓库里的镜像
    [root@jdss7-21]# kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345 -n armory

    应用资源配置清单

    kubectl apply -f http://k8s-yaml.od.com/armory/minio/dp.yaml
    kubectl apply -f http://k8s-yaml.od.com/armory/minio/svc.yaml
    kubectl apply -f http://k8s-yaml.od.com/armory/minio/ingress.yaml
    

    验证
    minio.od.com
    进入验证
    curl localhost:9000/minio/health/ready
    创建Bucket

    6.2 部署redis

    [root@jdss7-200]#docker pull redis:4.0.14
    [root@jdss7-200]# docker images | grep redis
    [root@jdss7-200]# docker tag xxx harbor.od.com/armory/redis:v4.0.14
    [root@jdss7-200]# docker push harbor.od.com/armory/redis:v4.0.14
    

    service.yaml
    service概念是为了集群内别人连接用服务名

    kind: Service
    apiVersdion: v1
    metadata:
      name: redis
      namespace: armory
    spec:
      selector:
        app: redis
      ports:
        - port: 6379
          targetPort: 6379
          protocol: TCP
    

    dp.yaml

    kind: Deployment
    apiVersion: extensions/v1beta1
    metadata:
      name: redis
      namespace: armory
      labels:
        name: redis
    spec:
      replicas: 1
      revisionHistoryLimit: 7
      selector:
        matchLabels:
          name: redis    
      template:
        metadata:
          labels:
            app: redis
            name: redis
        spec:
          containers:
          - name: redis
            image: harbor.od.com/armory/redis:v4.0.14
            imagePullPolicy: Always
            ports:
            - containerPort: 6379
              protocol: TCP
          imagePullSecrets:
          - name: harbor
    

    应用资源配置清单

    kubectl apply -f http://k8s-yaml.od.com/armory/redis/dp.yaml
    kubectl apply -f http://k8s-yaml.od.com/armory/redis/svc.yaml
    

    6.3 部署clouddriver

    [root@jdss7-200]# docker pull docker.io/armory/apinnaker-clouddriver-slim:release-1.8.x-14c9664
    [root@jdss7-200]# docker tag xxxx harbor.od.com/armory/clouddriver:v1.8.x
    [root@jdss7-200]# docker push harbor.od.com/armory/clouddriver:v1.8.x
    

    6.3.1 创建secret的依赖

    /data/k8s-yaml/armory/clouddriver/credentials

    [default]
    aws_access_key_id=admin
    aws_secret_access_key=admin123
    

    6.3.2 运算节点下载credentials文件

    wget http://k8s-yaml.od.com/armory/clouddriver/credentials -O /usr/local/
    kubectl create secret generic credentials --from-file=/usr/local/credentials -n armory
    

    6.3.3 准备k8s的用户配置

    1. 给spinnaker的kubernetes的cluster集群管理员的权限

    签发证书

    [root@jdss7-200]# cd /opt/certs/admin-csr.json
    {
        "CN":"cluster-admin",
        "hosts":[
        ],
        "key":{
            "algo":"rsa",
            "size":2048
        },
        "names":[
            {
                "C":"CN",
                "ST":"beijing",
                "L":"beijing",
                "O":"od",
                "OU":"ops"
            }
        ]
    }
    

    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client admin-csr.json | cfssl-json -bare admin
    就创建出来了admin.pem 和admin-key.pem

    1. 运算节点copy相关证书
    scp jdss7-200:/opt/certs/ca.pem .
    scp jdss7-200:/opt/certs/admin.pem .
    scp jdss7-200:/opt/certs/admin-key.pem .
    kubectl config set-cluster myk8s --certificate-authority=./ca.pem --embed-certs=true --server=https://10.4.7.10:7443 --kubeconfig=config
    kubectl config set-credentials cluster-admin --client-certificate=./admin.pem --client-key=./admin-key.pem --embed-certs=true --kubeconfig=config
    kubectl config set-context myk8s-context --cluster=myk8s --user=cluster-admin --kubeconfig=config
    kubectl config use-context myk8s-context --kubeconfig=config
    kubectl create clusterrolsbinding myk8s-admin --clusterrole=cluster-admin --user=cluster-admin
    kubectl config view
    
    1. 远程主机管理k8s集群
    mkdir -p /root/.kube
    cd /root/.kube
    scp jdss7-21:/root/config .
    scp jdss7-21:/opt/kubernetes/server/bin/kubectl .
    // 在目标机器执行如下语句
    export KUBECONFIG=/root/.kube/config 放到/etc/profile里
    
    1. 创建configMap
    kubectl create configmap default-kubeconfig --from-file=./default-kubeconfig -n armory
    

    6.4 部署front50

    6.5 部署orca

    6.6 部署echo

    6.7 部署igor

    6.8 部署gate

    6.9 部署deck

  • 相关阅读:
    java集合之HashMap源码解析
    springboot下多线程开发注意事项
    java集合之List源码解析
    关于Layer web弹层组件的加载(loading)层位置居中问题
    微信公众号支付提示mch_id参数格式错误
    ASP.NET MVC 中使用Highcharts+Ajax+Json生成动态曲线图,柱状图,饼图
    C#常见金额优选类型及其三种常用的取整方式
    Mui Webview下来刷新上拉加载实现
    Select下拉框使用ajax异步绑定数据
    .NET、C#基础知识
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/16215789.html
Copyright © 2020-2023  润新知