Code Monkey home page Code Monkey logo

decapod-base-yaml's Issues

Grafana의 Thanos 연동으로 전환

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

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

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

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 다시 재설치할 예정입니다 ^^.

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 정보만 잘 관리하기로 한 현 시점에서 위 파일을 유지할 필요없다고 판단하여 제안합니다.

Containerd 적용하여 Taco 설치

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

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

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

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

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 등)

use elastic/eck-operator helm chart

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

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.