Giter Club home page Giter Club logo

decapod-base-yaml's Introduction

decapod-base-yaml

This project provides an easy way to create/maintain complex YAML files using kustomize and kustomize plugin.
It works with decapod-site which contain differences between each environment (e.g. development, staging and production environment).

Features

  • base-yaml and site-yaml structure
  • Qualified product
    • LMA(Logging, Monitoring, Alert)
    • OpenStack
    • Cloud Console

Documents

Layout

An example of decapod-base-yaml:

 openstack
 ├── base
 │   ├── kustomization.yaml
 │   ├── resources.yaml
 │   └── site-values.yaml
 ├── image
 │   └── image-values.yaml 
 └── storage
     ├── ceph.yaml
     └── local-path.yaml

An example of decapod-site:

 dev // site name
 ├── openstack
     ├── kustomization.yaml
     ├── ceph.yaml
     └── site-values.yaml

Example

base(1) + site(2) => variant(3)

  1. decapod-base-yaml/lma/base/resources.yaml:

    apiVersion: helm.fluxcd.io/v1
    kind: HelmRelease
    metadata:
    name: elasticsearch-operator
    spec:
    chart:
       repository: https://openinfradev.github.io/helm-repo
       name: elasticsearch-operator
       version: 1.0.3
    releaseName: elasticsearch-operator
    targetNamespace: elastic-system
    values:
       elasticsearchOperator:
          nodeSelector: {} # TO_BE_FIXED
  2. decapod-site/dev/lma/site-values.yaml:

    apiVersion: openinfradev.github.com/v1
    kind: HelmValuesTransformer
    metadata:
    name: site
    
    global:
    nodeSelector:
       taco-lma: enabled
    
    charts:
    - name: elasticsearch-operator
    override:
       elasticsearchOperator.nodeSelector: $(nodeSelector)
  3. decapod-site/dev/lma/lma-manifest.yaml:

    apiVersion: helm.fluxcd.io/v1
    kind: HelmRelease
    metadata:
    name: elasticsearch-operator
    spec:
    chart:
       repository: https://openinfradev.github.io/helm-repo
       name: elasticsearch-operator
       version: 1.0.3
    releaseName: elasticsearch-operator
    targetNamespace: elastic-system
    values:
       elasticsearchOperator:
          nodeSelector:
          taco-lma: enabled

decapod-base-yaml's People

Contributors

bluejaya avatar cho4036 avatar estherk0 avatar intelliguy avatar jaesang avatar johnhaan avatar ktkfree avatar robertchoi80 avatar seungkyua avatar zugwan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

decapod-base-yaml's Issues

Helm-Release의 무한 Upgrade 이슈

1. 현상

1.1 Helm

아래는 설치된지 약 6시간도 안된 OpenStack-Helm 입니다.
보시면, Cinder와 Glance의 Revision이 29와 25이며, 현재 계속 올라가고 있습니다.
Nova와 Neutron도 마찬가지로 꽤나 높은 숫자였지만, 디버깅 하는 과정에서 삭제되어 아래 목록에는 안보이는 상태입니다.

[blackcoffee@ce01-deploy01 ~]$ helm list --all -n openstack
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/blackcoffee/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/blackcoffee/.kube/config
NAME             	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART                  	APP VERSION
ceph-provisioners	openstack	3       	2021-07-25 18:34:50.163011821 +0000 UTC	deployed	ceph-provisioners-0.1.0
cinder           	openstack	29      	2021-07-26 04:52:42.706896178 +0000 UTC	deployed	cinder-0.1.1
glance           	openstack	25      	2021-07-26 04:52:35.263019669 +0000 UTC	deployed	glance-0.1.0
horizon          	openstack	1       	2021-07-25 18:57:50.11778784 +0000 UTC 	deployed	horizon-0.1.0
ingress          	openstack	3       	2021-07-25 18:34:55.874215201 +0000 UTC	deployed	ingress-0.1.0
keystone         	openstack	1       	2021-07-25 18:37:03.833332752 +0000 UTC	deployed	keystone-0.1.0
libvirt          	openstack	3       	2021-07-25 18:34:49.15273463 +0000 UTC 	deployed	libvirt-0.1.0
mariadb          	openstack	3       	2021-07-25 18:34:53.315645939 +0000 UTC	deployed	mariadb-0.1.1
memcached        	openstack	3       	2021-07-25 18:34:57.181383155 +0000 UTC	deployed	memcached-0.1.0
openvswitch      	openstack	3       	2021-07-25 18:34:49.117405184 +0000 UTC	deployed	openvswitch-0.1.0
rabbitmq         	openstack	3       	2021-07-25 18:34:52.232571123 +0000 UTC	deployed	rabbitmq-0.1.0

1.2 Pods

Pod 들이 수 분 단위로 재생성 되면서 사실상 OpenStack 운영은 사실상 불가합니다.

[blackcoffee@ce01-deploy01 ~]$ kubectl get pods -n openstack
NAME                                                       READY   STATUS             RESTARTS   AGE
cinder-api-5ccdd5c9ff-hlrrz                                1/1     Running            0          16s
cinder-api-5ccdd5c9ff-pkq6q                                1/1     Running            0          16s
cinder-api-5ccdd5c9ff-ztvj6                                1/1     Running            0          16s
cinder-api-6fd8d6cff6-49q6c                                0/1     Terminating        0          3m17s
cinder-api-6fd8d6cff6-dfrqn                                0/1     Terminating        0          3m17s
glance-api-654cbff9bd-t9rvj                                0/1     Terminating        0          3m15s
glance-api-654cbff9bd-wnclk                                1/1     Terminating        0          3m15s
glance-api-794749f97b-2xzg6                                0/1     Running            0          14s
glance-api-794749f97b-f24cc                                1/1     Running            0          14s
glance-api-794749f97b-rg5mq                                1/1     Running            0          14s

2. 이슈

2.1 Helm-Operator

Helm Operator가 원인으로 보입니다.
Helm Operator의 로그를 보면 아래와 같이 Change detected 라고 뜨는데, 사실 제가 변경한건 없습니다.

ts=2021-07-26T05:10:39.381765887Z caller=release.go:303 component=release release=glance targetNamespace=openstack resource=default:helmrelease/glance helmVersion=v3 info="difference detected during release comparison" phase=dry-run-compare
ts=2021-07-26T05:10:39.38180762Z caller=release.go:353 component=release release=glance targetNamespace=openstack resource=default:helmrelease/glance helmVersion=v3 info="running upgrade" action=upgrade
ts=2021-07-26T05:10:39.417051561Z caller=helm.go:69 component=helm version=v3 info="preparing upgrade for glance" targetNamespace=openstack release=glance
ts=2021-07-26T05:10:39.446483547Z caller=helm.go:69 component=helm version=v3 info="resetting values to the chart's original version" targetNamespace=openstack release=glance
ts=2021-07-26T05:10:39.896004769Z caller=helm.go:69 component=helm version=v3 info="performing update for glance" targetNamespace=openstack release=glance
ts=2021-07-26T05:10:39.975862834Z caller=helm.go:69 component=helm version=v3 info="creating upgraded release for glance" targetNamespace=openstack release=glance
ts=2021-07-26T05:10:40.176926538Z caller=helm.go:69 component=helm version=v3 info="checking 58 resources for changes" targetNamespace=openstack release=glance

Helm-Operator에 동일한 이슈가 발생하여 Issue가 등록된게 있습니다.

fluxcd/helm-operator#457

3. 증상 재현

증상을 재현하는 방법은 알려져 있지 않고, 저의 경우에도 OpenStack-Manifest를 여러번 고쳐가며 적용하는 과정에서 발생하였습니다.
처음에는 해당 증상이 보이지 않았으며, OpenStack-Manifest의 설정값으로 인해 발생하는 CrashLookBackoff Pod들을 찾아가고 올바른 설정을 적용하는 과정에서 해당 문제가 발생하였습니다.

4. 해결방안,

위 Helm-Operator 에 올라와있는 내용대로 Helm-Operator 버전을 1.1.1에서 1.2.0으로 업그레이드 하고, CRD를 적용 하였음에도 해당문제는 게속 발생하고 있습니다.

K8S 클러스터를 Reset 후 OpenStack 다시 재설치할 예정입니다 ^^.

Tacoplay로 k8s 업그레이드 테스트

Description
Kubespray로 air-gapped 환경 (향후 필요시 진행) outbound 오픈만 가능한 환경에서 순차적으로 버전 업그레이드 테스트를 진행한다.

이 때 신규설치, 업그레이드 2가지 케이스 모두 테스트 필요하므로 병렬로 진행하되, 하나의 버전이 테스트 완료되면 그 버전에 대해 즉시 릴리즈를 수행한다 (혹은 의미있는 k8s 버전에만 릴리즈? 예를 들면 한 버전씩 건너뛰면서..)
E.g.,) 1.17 신규설치 -> 1.18로 업그레이드 -> 1.19로 업그레이드 -> ...
--------------------| 1.18 신규 설치 -- | 1.19 신규설치 | ...
--------------------| 1.18 릴리즈 ---- | 1.19 릴리즈 -- |

Jenkins의 deploy-taco 와 upgrade-k8s job을 활용하되, 혹시 kubespray version override가 필요할 경우, upgrade-k8s job 에 파라미터로 추가하도록 한다.

(update) kubespray가 지원하는 k8s 버전을 보니 kubespray 버전도 적어도 한두번은 올리면서 테스트해야할 것 같습니다.

  • kubespray 2.14.2: k8s 1.17.0 ~ 1.18.10
  • kubespray 2.15.1: k8s 1.18.0 ~ 1.19.9
  • kubespray 2.16.0: k8s 1.19.0 ~ 1.20.7
  • kubespray 2.17.0: k8s 1.19.0 ~ 1.21.5

산출물

  • 각 버전별 릴리즈 (github 상의 브랜치 및 tag)
  • inventory 파일 (extra-vars 등)

Grafana의 Thanos 연동으로 전환

개요
Thanos 도입에 따라 grafana의 datasource를 fed-master에서 thanos로 연결한다.

작업내역
연동 변경을 통해 기존 데이터가 thanos를 통해서 잘 조회되는 지까지 포함한 작업

완료조건
jenkins의 deploy job을 통해 만들어진 vm에서 grafana의 데이터 소스가 thanos로 연결되는 것을 확인

Containerd 적용하여 Taco 설치

** Description **
Tacoplay로 taco 설치시 containerd 를 적용한다
k8s 버전 v1.21 기준으로 테스트하여 잘 동작함을 확인한다

추가적으로, offline 환경에서 local docker registry에 접근 가능함을 확인한다.

** 완료조건 **
Jenkins job 'deploy-taco' 성공 (/w containerd enabled)

** 산출물 **
inventory 파일 (extra-vars 포함)

use elastic/eck-operator helm chart

  • elastic에서 정식으로 사용중인 eck-operator를 사용한다.
    • eck-operator 차트는 elastic operator만 설치한다. (custom resource는 만들지 않음)
  • elastic-operator 차트를 eck-resources 차트로 변경한다.
  • eck-resources 차트에서는 elasticsearch, kibana 등의 리소스를 직접 만든다.

image values validation

Related Issue

#16

Description

  • $APP_NAME/image/image-values.yaml 파일을 유지보수하기 위해 validation job 이 필요하다.
  • github action으로 main branch에 PR 요청시 image-values.yaml를 validation 한다.
  • 다음의 validation logic을 참고
    • github action의 로직
      • base/resources.yaml에 정의된 helm chart의 version을 기준으로 helm chart의 values.yaml에 있는 repository, tag 값이 image/image-values.yaml에 존재하는지 확인
      • repository, tag 값이 존재하지 않거나 upstream의 값과 다르면 "error message"를 발생시킴 => github action failed 처리
      • 예외) upstream 차트에 정의된 값이 아닌 특정 image를 사용하고 싶은 경우, base/resources.yaml에 values override를 한다. value값의 우선순위는 helm chart/values.yaml < base/resources.yaml의 value override이다.

"APP/image 디렉토리를 제거" 제안

본 디렉토리에는 APP/image 디렉토리를 갖고 있습니다.
이 역할은

  • 기존에 내부 이미지를 사용하기위해 이미지 재지정을 위해 이미지만 수동으로 빼어 놓은 것이었습니다.
  • 그리고 내부 개발에서 내부로 옮겨놓은 이미지를 사용하도록 했었습니다.

현재 이를 사용하지 않는 방법은

  • decapod-site-yaml/$APP/$SITE/image-values.yaml을 정의하지 않고
  • decapod-site-yaml/$APP/$SITE/kustomization.yaml에도 지정하지 않음으로

가능합니다.

이렇게 함으로써 장점은

  • 이미지 재정의 필요시 바로 사용가능하다

단점은

  • base의 chart 변경/삭제(CUD) 등에 image-values 파일을 변경해 줘야합니다.
  • 또한 이를 확인할 방법은 commiter가 잘 하는 것 외에는 없습니다

현재 이미지를 이동하지 않고 tag 정보만 잘 관리하기로 한 현 시점에서 위 파일을 유지할 필요없다고 판단하여 제안합니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.