본 가이드는 features 쿠버네티스 Helmfile CD Architecture 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.
📑 Table of Contents
- 1. Information
- • gitops repository
- • Cluster Version
- • Architectures
- 2. Cluster Installation
- • Global Setting
- • in NFS Server
- • in Business-cluster HAProxy Servers
- • in Management-cluster
- • When Business Clusters Installed (in Management-cluster)
- 3. Application Installation
- • Required
- • in Business-clusters
- • in Management-cluster
- 4. 각 마스터노드로 보내기
- 5. 각 마스터노드 내에서 다음 실행
- • in NFS Server
- 6. Application Uninstallation
- 7. Features
Information
참고자료
gitops repository
Cluster Version
Architectures
Cluster Installation
Global Setting
vi /etc/systemd/resolved.conf
>>>
[Resolve]
DNS=<management_node_ip> 8.8.8.8
<<<
systemctl restart systemd-resolved.service
in NFS Server
NFS Server Installation
# 이 리포에서 내용 복사해 파일 생성 추천
vi setup-nfs-server.sh
chmod +x setup-nfs-server.sh
./setup-nfs-server.sh
in Business-cluster HAProxy Servers
HAProxy Installation & setting
# Dev-LB, Stg-LB Nodes
sudo apt-get update && apt-get -y upgrade
apt install -y haproxy
sudo systemctl enable haproxy
sudo systemctl start haproxy
sudo systemctl status haproxy
haproxy -v
# config 생성
CP1_IP=""
CP2_IP=""
CP3_IP=""
WK1_IP=""
WK2_IP=""
WK3_IP=""
cat <<EOF > /etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
option httplog
timeout connect 5000
timeout client 50000
timeout server 50000
frontend k8s_api
bind *:6443
mode tcp
option tcplog
default_backend k8s_api_backend
backend k8s_api_backend
mode tcp
balance roundrobin
option tcp-check
server master1 $CP1_IP:6443 check
server master2 $CP2_IP:6443 check
server master3 $CP3_IP:6443 check
frontend nginx_ingress
bind *:443
mode tcp
option tcplog
default_backend nginx_ingress_backend
backend nginx_ingress_backend
mode tcp
balance roundrobin
option tcp-check
server worker1 $WK1_IP:30443 check
server worker2 $WK2_IP:30443 check
server worker3 $WK3_IP:30443 check
frontend nginx_ingress_http
bind *:80
mode tcp
option tcplog
default_backend nginx_ingress_http_backend
backend nginx_ingress_http_backend
mode tcp
balance roundrobin
option tcp-check
server worker1 $WK1_IP:30080 check
server worker2 $WK2_IP:30080 check
server worker3 $WK3_IP:30080 check
frontend amqp
bind *:5672
mode tcp
option tcplog
default_backend amqp_backend
backend amqp_backend
mode tcp
balance roundrobin
option tcp-check
server worker1 $WK1_IP:30672 check
server worker2 $WK2_IP:30672 check
server worker3 $WK3_IP:30672 check
frontend mariadb
bind *:3306
mode tcp
option tcplog
default_backend mariadb_backend
backend mariadb_backend
mode tcp
balance roundrobin
option tcp-check
server worker1 $WK1_IP:30306 check
server worker2 $WK2_IP:30306 check
server worker3 $WK3_IP:30306 check
frontend redis
bind *:6379
mode tcp
option tcplog
default_backend redis_backend
backend redis_backend
mode tcp
balance roundrobin
option tcp-check
server worker1 $WK1_IP:30379 check
server worker2 $WK2_IP:30379 check
server worker3 $WK3_IP:30379 check
frontend keycloak_http
bind *:8880
mode tcp
option tcplog
default_backend keycloak_http_backend
backend keycloak_http_backend
mode tcp
balance roundrobin
option tcp-check
server worker1 $WK1_IP:31080 check
server worker2 $WK2_IP:31080 check
server worker3 $WK3_IP:31080 check
EOF
systemctl restart haproxy
in Management-cluster
Kube-VIP: VIP 선정, NIC 확인 (Openstack Network에서 ARP 차단하여 실패) (35a00f54)
⚠️ (비즈니스 클러스터와 대역이 다르거나, NIC Name이 다를 수 있는 환경이라면 해당 클러스터에서 진행. 여기는 동일한 Openstack Network이므로 Management에서 진행)
- dev, stg 각각 VIP 선택하여 기억하기
- VIP:
bash
apt install -y nmap
# host down IP 확인
### 아래 결과중 x.x.x.0, x.x.x.1, x.x.x.255 (예약 주소) 제외하고 사용
needs_net="10.255.57.0/24"
nmap -v -sn -n $needs_net | grep "host down" - NIC:
bash
# 다음의 결과일 때 ens3 기억
ifconfig | grep '10.255.57' -B1 | head
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.255.57.142 netmask 255.255.255.0 broadcast 10.255.57.255 - kubespray 반영:
GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
cd $GIT_ROOT/_iac/kubespray
#kube-vip setting
### addons.yml 수정
##### kube_vip_address: <vip of env>
##### kube_vip_interface: <nic of env>
vi ./inventory/dev-cmp/group_vars/k8s_cluster/addons.yml
vi ./inventory/stg-cmp/group_vars/k8s_cluster/addons.yml
### k8s-cluster.yml 수정
##### kube_proxy_strict_arp: true
vi ./inventory/dev-cmp/group_vars/k8s_cluster/k8s-cluster.yml
vi ./inventory/stg-cmp/group_vars/k8s_cluster/k8s-cluster.yml
```
host setup
# /etc/hosts
# mgnt
127.0.0.1 localhost re-mgmt-deploy mng-dpl
10.255.57.84 mng-nfs
# dev
10.255.57.182 dev-lbs
10.255.57.111 dev-cp1
10.255.57.103 dev-cp2
10.255.57.97 dev-cp3
10.255.57.169 dev-wk1
10.255.57.228 dev-wk2
10.255.57.122 dev-wk3
10.255.57.123 dev-dbp
10.255.57.147 dev-db1
10.255.57.136 dev-db2
#### 10.255.57.240 dev-vip
# stg
10.255.57.112 stg-lbs
10.255.57.142 stg-cp1
10.255.57.179 stg-cp2
10.255.57.221 stg-cp3
10.255.57.114 stg-wk1
10.255.57.206 stg-wk2
10.255.57.229 stg-wk3
10.255.57.134 stg-dbp
10.255.57.164 stg-db1
10.255.57.70 stg-db2
#### 10.255.57.241 stg-vip
installation Management Cluster
# go-to
git clone https://[email protected]/Enterprise Cloudlab/cmp-helm.git
cd cmp-helm
git switch Enterprise Cloud-dev
GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
cd $GIT_ROOT/_iac
# k3s 설치
./k3s/server-install-k3s.sh
source ~/.bashrc
# IaC & GitOps 관련 바이너리 세팅
./server.sh
sudo apt install python3-pip -y
sudo pip3 install -r kubespray/requirements.txt
installation Business Clusters
⚠️ 반드시 /etc/hosts 설정 확인 후 진행
현재 playbook은 online환경 기반으로만 테스트됨.
GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
cd $GIT_ROOT/_iac/kubespray
ansible-playbook -i inventory/dev-cmp/inventory.ini cluster.yml -vv
ansible-playbook -i inventory/stg-cmp/inventory.ini cluster.yml -vv
trouble shooting
⚠️ 다음의 에러는 DockerHub 레지스트리의 Pull 정책 변경으로 인하여 발생함.
docker: Error response from daemon: toomanyrequests: You have reached your unauthenticated pull rate limit. https://www.docker.com/increase-rate-limit
nerdctl: FATA[0006] failed commit on ref "index-sha256:e21f8d0566ad4a2b7de56dae9e662147af6df51ed8a46692be3931513a1a56d7": commit failed: "index-sha256:e21f8d0566ad4a2b7de56dae9e662147af6df51ed8a46692be3931513a1a56d7" failed size validation: 341810 != 10229: failed precondition
- solving
# dockerhub 무료계정 로그인으로 임시 해소 가능 (무료계정은 pull 횟수제한있음)
# 설치 실패한 모든 클러스터 node 에서: (이 시점에 `nerdctl`은 설치 완료 되어있음)
nerdctl login docker.io
When Business Clusters Installed (in Management-cluster)
Kubeconfig 가져오기
GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
cd $GIT_ROOT/_iac
./k8s_generate_kubeconfig_with_ssh_v2.sh dev dev-lbs [ sshport ] > $GIT_ROOT/_gitops/.tmp/.dev.kubeconfig
./k8s_generate_kubeconfig_with_ssh_v2.sh stg stg-lbs [ sshport ] > $GIT_ROOT/_gitops/.tmp/.stg.kubeconfig
# test
k get pods -A --kubeconfig $GIT_ROOT/_gitops/.tmp/.dev.kubeconfig
k get pods -A --kubeconfig $GIT_ROOT/_gitops/.tmp/.stg.kubeconfig
cat <<EOF >> ~/.bashrc
alias kd="kubectl --kubeconfig /workspace/cmp-helm/_gitops/.tmp/.dev.kubeconfig"
alias ks="kubectl --kubeconfig /workspace/cmp-helm/_gitops/.tmp/.stg.kubeconfig"
EOF
source ~/.bashrc
kd get pods -A
ks get pods -A
all worker Nodes
# management node, business workers
sudoapt-get update
sudoapt-getinstall -y nfs-common
Application Installation
go to:
GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
cd $GIT_ROOT/_gitops
Required
- Helmfile에서 SSH를 통해 Gitops 하기 위해 선행작업 필요
1. server public key 복사
bash
cat ~/.ssh/id_rsa.pub
# 없을 경우 key-gen
ssh-keygen
2. https://bitbucket.org/account/settings/ssh-keys/ 접근해서 SSH 공개키 등록 - Variable 수정
vi values/clusters.hcl
# 다음을 수정
### clusters.mgnt.hostIp = "Mgnt 마스터노드 IP"
### clusters.mgnt.nfs.ip = "Mgnt NFS IP" #현재 버전은 NFS 1개로 나누어 사용
### clusters.dev.hostIp = "Dev 마스터노드 IP"
### clusters.dev.nfs.ip = "Dev NFS IP" #현재 버전은 NFS 1개로 나누어 사용
### clusters.stg.hostIp = "Stg 마스터노드 IP"
### clusters.stg.nfs.ip = "Stg NFS IP" #현재 버전은 NFS 1개로 나누어 사용
in Business-clusters
Step0. Prepare Worker Nodes
### All Business works
# DNS 사용
vi /etc/systemd/resolved.conf
>>>
[Resolve]
DNS=<management_node_ip>#8.8.8.8
<<<
systemctl restart systemd-resolved.service
# Harbor Certificate
sudomkdir -p /etc/containerd/certs.d/harbor.Enterprise Cloud.hanacloudia.com
cat<<EOF> /etc/containerd/certs.d/harbor.Enterprise Cloud.hanacloudia.com/ca.crt
##### <ca.crt 내용 삽입> #####
EOF
# or
cp /etc/kubernetes/ssl/certs/serverca /etc/containerd/certs.d/harbor.Enterprise Cloud.hanacloudia.com/ca.crt
in Management-cluster
Step1. Helmfile Sync (To set ArgoCD)
The following application(s) will be created.
- Prepare hooks
- Create All-Namespaces
- Run on docker: local-registry
- Load & Push Images from backed-up Dir
- Run
kube-apiserverproxy:localhost:8080 - Auto-Gen:
Secret=$basicAuthSecret nfs-subdir-external-provisioner- Required:
package=nfs-common cert-manager- Auto-Gen:
ClusterIssuer=selfsigned-issuer - Auto-Gen:
Certificates=hanacloudia.com-cacert - Auto-Gen:
ClusterIssuer=rootca-issuer - Create File:
./.tmp/ca.crt(To call the Harbor API) - Send File:
./.tmp/ca.crtto every Nodes of Business Clusters - Create File: `
./.tmp/ca-issuer.yamlfor Business Clusters ingress-nginxadguard-home- Pre-Configure:
DNS=harber,argo-cd harbor- Call API: create project
management-system - Call API: create project
deploy-system - Call API: create project
portal-system - Call API: create project
dev-portal - Call API: create project
stg-portal - Certificate & Authorize
- Load & Push Images from backed-up Dir
argo-cd- Management Cluster Jobs
- Pre-Configure: argocd-helmfile-plugin
- Pre-Configure: Auto-Connect Private Repository
[email protected]:Enterprise Cloudlab/cmp-helm.gitwith CRED - Auto-Gen:
PersistentVolumClaim=apache-htdocs-pvc - Auto-Gen:
Application=apache - Auto-Gen:
Application=jenkins - Auto-Gen:
Application=vault
- Business Cluster Jobs
- Auto-Gen:
Secret=$globalImagePullSecretto Every Namespaces - Pre-Configure: Auto-Connect Clusters
- Auto-Gen:
Application=nfs-subdir-external-provisioner - Auto-Gen:
Application=cert-manager - Auto-Gen:
Application=ingress-nginx - Auto-Gen:
Application=redisfor CMP - Auto-Gen:
Application=mariadbfor CMP - Auto-Gen:
Application=redisfor CMP
- Auto-Gen:
How does it work? (helmfile Docs)
ℹ️ 경로 내에 helmfile.yaml.gotmpl을 읽습니다.
goTemplate 문법으로 ./values아래의 .hcl, .yaml에서 정의한 변수를 Overwrite합니다.
# DNS 포트충돌 방지
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
sudo systemctl mask systemd-resolved
sudo rm -f /etc/resolv.conf
sudo bash -c 'cat > /etc/resolv.conf <<EOF
nameserver 127.0.0.1 #adguard-home
nameserver 8.8.8.8
nameserver 1.1.1.1
options edns0
EOF'
# 다른 서비스에서 수정금지
sudo chattr -i /etc/resolv.conf
# DNS사용 불가할 경우 사전 조치
### echo '127.0.0.1 harbor.Enterprise Cloud.hanacloudia.com argocd.Enterprise Cloud.hanacloudia.com' | sudo tee -a /etc/hosts
helmfile sync
- Trouble shooting
# 화면이 멈춘 경우 오류가 원인일 수 있다. 오류인 경우 ctrl+C로 escape
# 그러나 다음의 경우 주의
---
Release "harbor" does not exist. Installing it now.
NAME: harbor
LAST DEPLOYED: Sun Dec 14 20:44:41 2025
NAMESPACE: management-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Please wait for several minutes for Harbor deployment to complete.
Then you should be able to visit the Harbor portal at https://harbor.Enterprise Cloud.hanacloudia.com
For more details, please visit https://github.com/goharbor/harbor
Listing releases matching ^harbor$
harbor management-system 1 2025-12-14 20:44:41.468450736 +0900 KST deployed harbor-1.18.0 2.14.0
---
# 다음 화면에서 멈춰있는 경우 오류가 아니라, backup image들을 Harbor에 push중일 확률이 높음.
# harbor가 이미 설치완료되었으므로, UI에 접근하여 이미지 업로드중인지 확인.
Step2. Restore Image Registry
When the directory structure is roughly as follows:
.
├── deploy-system
│ └── apache.tar
├── library
│ ├── broker-base.tar
│ ├── busybox.tar
│ ├── curlimage.tar
│ ├── ibmjava.tar
│ └── nginx.tar
├── portal-system
│ ├── keycloak.tar
│ ├── mariadb.tar
│ ├── rabbitmq.tar
│ ├── redis.tar
│ ├── vault-k8s.tar
│ └── vault.tar
...
Replace the $backup_dir and run as follows
#helmfile.yaml.gotmpl에 통합됨
#./scripts/docker_load-and-push.sh /mnt/apache/html/backup-data/
### ./scripts/docker_load-and-push.sh $backup_dir
Step3. Install & Restore Vault
- Install
#helmfile.yaml.gotmpl에 통합됨
### kubectl apply -f argo-apps/mgnt/vault.yaml
- Init Vault
k exec -it -n portal-system vault-0 --container vault -- vault operator init > shared-key-dump.txt
sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g" shared-key-dump.txt > ./.tmp/vault-shared-key.txt
rm shared-key-dump.txt
cat ./.tmp/vault-shared-key.txt
- 다음과 같은 key-set이 나오는데,
vault재시작시Unseal Key3개가 필요하므로 잘 저장해둔다.
Unseal Key 1: NmcbH0bxGABFSk0qNgKrXi9dxeiJsq8DrBDgEsVDegus
Unseal Key 2: kY10hNpENinpiUFKJZwXiJOsCAoyjp7pWAt2tyTwTj5Z
Unseal Key 3: xtAB/krc4fumYR6X+WaaC7fIAuqeThdF6O/ZirM526uR
Unseal Key 4: iHHqqtjJYthnjFo2pxSPzxOLH2cAbOfFwmQsJFpxfrwO
Unseal Key 5: HU9RLIOJVuMUvdzNAAFToZMWDb97UD1FFgji/3sxmY6k
Initial Root Token: hvs.pWUTilJ5CxAi6S2daKcKPeha
- [Auto-mode] Unseal And Create Secret
# store root-token
#cat ./.tmp/vault-shared-key.txt | sed -n '7p' | awk '{ print $4 }' | tee ./.tmp/vault-root-token.txt
cat ./.tmp/vault-shared-key.txt | sed -n '7p' | awk '{ gsub(/\x1b\[[0-9;]*m/, "", $4); print $4 }' | tee ./.tmp/vault-root-token.txt
# Auto
./scripts/vault_unseal.sh ./.tmp/vault-shared-key.txt
k exec -it -n portal-system vault-0 --container vault -- vault login $(cat ./.tmp/vault-root-token.txt)
k exec -it -n portal-system vault-0 --container vault -- vault secrets enable -path=secret kv-v2
k exec -it -n portal-system vault-0 --container vault -- sh
# --- start in vault container
echo '''
path "*" {
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}''' > /tmp/admin.hcl
exit
# --- end
./scripts/vault_enable_userpass.sh admin Cloud000@ portal-system $(cat ./.tmp/vault-root-token.txt | tr '\n' '')
- [Manual-mode] Unseal And Create Secret
# Manual
k exec -it -n portal-system vault-0 -- sh
# --- start in vault container
vault operator unseal NmcbH0bxGABFSk0qNgKrXi9dxeiJsq8DrBDgEsVDegus
vault operator unseal kY10hNpENinpiUFKJZwXiJOsCAoyjp7pWAt2tyTwTj5Z
vault operator unseal iHHqqtjJYthnjFo2pxSPzxOLH2cAbOfFwmQsJFpxfrwO
# RootToken으로 로그인
vault login hvs.pWUTilJ5CxAi6S2daKcKPeha
# Secret 생성
vault secrets enable -path=secret kv-v2
# UserPass 활성화
echo '''
path "*" {
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}''' > /tmp/admin.hcl
vault policy write ${POLICY_NAME} /tmp/${POLICY_NAME}.hcl
if vault auth list | grep -q "userpass/"; then
echo "[SKIP] userpass already enabled"
else
vault auth enable userpass
# UI에서 기본 로그인으로 사용 옵션
vault auth tune -listing-visibility=unauth userpass/
echo "[OK] userpass enabled"
fi
vault write auth/userpass/users/admin \
password="Cloud000@" \
policies="admin"
# --- end
- push to upstream
git add ./.tmp
git commit -m '(re) init vault token'
git push
- Resotre Valut
safe target vault http://$(k get svc -n portal-system vault -o=jsonpath='{.spec}' | jq -r '"\(.clusterIP):\(.ports[] | select(.name=="http")).port")')
safe auth # Initial Root Token 입력
safe import < $backed_up_json
Step4. Etc.
#helmfile.yaml.gotmpl에 통합됨
# Install Apache
### kubectl apply -f manifests/apache/pvc-htdocs.yaml
### kubectl apply -f argo-apps/mgnt/apache.yaml
# Install Jenkins
### kubectl apply -f argo-apps/mgnt/jenkins.yaml
Step5. Add Clusters to Argo CD
After context setting…
#helmfile.yaml.gotmpl에 통합됨
### argocd cluster add dev_cluster
### argocd cluster add stg_cluster
⚠️ ./argo-apps/*/*.yaml파일들의 .spec.destination.server를 반드시 미리 수정해둡니다. (Env: dev, stg)
Step6. Install & Restore Database
- Install Database
#helmfile.yaml.gotmpl에 통합됨
### cd argo-apps
### kubectl apply \
### -f dev/mariadb.yaml -f dev/rabbitmq.yaml -f dev/redis.yaml \
### -f stg/mariadb.yaml -f stg/rabbitmq.yaml -f stg/redis.yaml
- Restore Database
GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
cd $GIT_ROOT/_backups/sqls
#dev
kd exec -i -n portal-system mariadb-primary-0 --container mariadb -- mariadb -uroot -pCloud000@ <<EOF
create database OKE_DEVOPS;
create database ECP_USER;
create database ECP_ADMIN;
create database keycloak;
use keycloak;
CREATE USER IF NOT EXISTS 'keycloak'@'%' IDENTIFIED BY 'keycloak';
GRANT ALL PRIVILEGES ON *.* TO 'keycloak'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'portal'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
kd exec -i -n portal-system mariadb-primary-0 --container mariadb -- mariadb -uroot -pCloud000@ keycloak < 20251109.mariadb.keycloak.sql
kd exec -i -n portal-system mariadb-primary-0 --container mariadb -- mariadb -uroot -pCloud000@ OKE_DEVOPS < 20251106.mariadb.OKE_DEVOPS.sql
kd exec -i -n portal-system mariadb-primary-0 --container mariadb -- mariadb -uroot -pCloud000@ ECP_USER < 20251106.mariadb.ECP_USER.sql
kd exec -i -n portal-system mariadb-primary-0 --container mariadb -- mariadb -uroot -pCloud000@ ECP_ADMIN < 20251106.mariadb.ECP_ADMIN.sql
#stg
ks exec -i -n portal-system mariadb-primary-0 --container mariadb -- mariadb -uroot -pCloud000@ <<EOF
create database OKE_DEVOPS;
create database ECP_USER;
create database ECP_ADMIN;
create database keycloak;
use keycloak;
CREATE USER IF NOT EXISTS 'keycloak'@'%' IDENTIFIED BY 'keycloak';
GRANT ALL PRIVILEGES ON *.* TO 'keycloak'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'portal'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
ks exec -i -n portal-system mariadb-primary-0 --container mariadb -- mariadb -uroot -pCloud000@ keycloak < 20251109.mariadb.keycloak.sql
ks exec -i -n portal-system mariadb-primary-0 --container mariadb -- mariadb -uroot -pCloud000@ OKE_DEVOPS < 20251106.mariadb.OKE_DEVOPS.sql
ks exec -i -n portal-system mariadb-primary-0 --container mariadb -- mariadb -uroot -pCloud000@ ECP_USER < 20251106.mariadb.ECP_USER.sql
ks exec -i -n portal-system mariadb-primary-0 --container mariadb -- mariadb -uroot -pCloud000@ ECP_ADMIN < 20251106.mariadb.ECP_ADMIN.sql
-
Trouble Shooting
“`bash
# Time out 대처방안
### E1215 12:29:09.296432 1320884 websocket.go:500] Websocket Ping failed: write tcp 10.255.57.88:56312->10.255.57.182:6443: use of closed network connection
### error: error reading from error stream: next reader: read tcp 10.255.57.88:56312->10.255.57.182:6443: i/o timeout각 마스터노드로 보내기
scp ./20251106.mariadb.ECP_ADMIN.sql root@dev-cp1:admin.sql
scp ./20251106.mariadb.ECP_ADMIN.sql root@stg-cp1:admin.sql각 마스터노드 내에서 다음 실행
kubectl cp ./admin.sql -n portal-system mariadb-primary-0:/bitnami/mariadb/admin.sql
kubectl exec -it -n portal-system mariadb-primary-0 --container mariadb -- bash
## in container
cd /bitnami/mariadb
mariadb -uroot -pCloud000@ ECP_ADMIN < admin.sql
## exit
```
Step7. Install Portal-System (Middlewares)
k apply -f dev/keycloak.yaml -f stg/keycloak.yaml
Step8. Install Portal
GIT_ROOT=$(git rev-parse --show-toplevel2>/dev/null)
#helmfile.yaml.gotmpl에 통합됨
### cd $GIT_ROOT/_gitops/manifests/cmp
### kd apply -f browser-pv.yaml -f cronjob-sa.yaml
### ks apply -f browser-pv.yaml -f cronjob-sa.yaml
cd$GIT_ROOT/_gitops/manifests/vault
# 다음을 "secret/dev/portal/cronjob"."cronjob.accessToken"에 replace
kd get secret -n cronjob cronjob-admin-token -ojsonpath='{.data.token}'| base64 -d
# 다음을 "secret/prd/portal/cronjob"."cronjob.accessToken"에 replace
ks get secret -n cronjob cronjob-admin-token -ojsonpath='{.data.token}'| base64 -d
# cronjob sa 수정
vi ./20251215.renew-secrets.json
k apply -f dev/cmp.yaml -f stg/cmp.yaml
in NFS Server
# softlink 생성
ln -s $(ls -l /srv/k8s-mgnt --format=single-column | grep apache) /root/apache_home
Application Uninstallation
argo-cd Managements
argocd app delete management-system/$argocd_appname
helmfile Managements
helmfile destroy
Features
Rancher Password 확인
#password 확인
kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{"\n"}}'
Rancher Password 오류시 (under 12 Characters)
#reset
kubectl -n cattle-system exec $(kubectl -n cattle-system get pods -l app=rancher | grep '1/1' | head -1 | awk '{ print $1 }') -- reset-password
Leave a Reply