vm ์ค๋น
master 3๋, node 6๋๋ก ์งํ
๊ฐ๊ฐ์ ๋
ธ๋์ ๋ฉํ์์ ์๋ ๋ก๊ทธ์ธ ์ค์ ์ ์งํํด ๋์ด์ผํ๋ค. cloud-init์ ์ด์ฉํ์ฌ vm์ค์น์ ์๋ํ๋ฅผ ์ถ์ฒ ๋๋ฆฐ๋ค.
architechture
master 1 2 3 ์ keepalived๋ฅผ ์ค์นํ๊ณ vip๋ฅผ 10๋ฒ์ ํ ๋นํด์ค๋ค.
master 1 2 3 ์ haproxy๊ฐ ์ค์น. ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ์๋น์ค์ ๋ฌธ์ ์๊ฒ ํ๋ค.
haproxy๊ฐ 1 2 3 ๋ฒ์ ์ค์น๋ kube api๋ฅผ ํฌ์ธํธ ํ๋ค.
node1-6๋ vip๋ฅผ kube-api ๊ฐ ์ฐ๊ฒฐ๋๋ค. ์ด๋ฌ๋ฉด ha ๊ฐ ์์ฑ๋๋ค.
prepare install
๋๋ gitops๋ฅผ ์ข์ํ๋ฏ๋ก ๊น ๋ฆฌํฌ๋ฅผ ํ๋ ๋ง๋ ๋ค.
https://github.com/teamsmiley/custom-kubespray
git clone git@github.com:teamsmiley/custom-kubespray.git
cd custom-kubespray
set custom k8s-cluser.yml
vi k8s-cluster.yml
# Set the drain timeout for pre-upgrade
drain_grace_period: 600
drain_timeout: 600s
kube_version: v1.21.5 # ์ํ๋ ๋ฒ์ ์ถ๊ฐ
review setup-kubespray.sh
vi setup-kubespray.sh
KUBESPRAY_VERSION=2.17.0
ENV=xxxx
์ํ๋ ๋ฒ์ ์ผ๋ก ์ค์ ์ ๋ณ๊ฒฝํ๋ค.
sh ์ค๋ช
์ค๋น ์๋ฃ
kubespray๊ฐ ๋ค์ด๋๊ณ ์ค์ ์ ๋ด๊ฐ ๋ฏธ๋ฆฌ ์ ํด๋๋๋ก ๋ณ๊ฒฝํ๋ค. ์ด๋ฌ๊ฒ ํด์ ์ด ํด๋ ์์ฒด๋ฅผ ์ปค๋ฐ/ํธ์๋ฅผ ํด๋์ด์ผํ๋ค. ๊ทธ๋์ผ ๋์ค์ ๋ด๊ฐ ์ด๋ฒ์ ์ ์ฌ์ฉํ์ฌ ์ค์นํ๊ฒ์ด ๋์จ๋ค. ์ฌ์ฉํ ๋ชจ๋ ๊ฑธ ์ค๋
์ท์ฐ๋ฏ์ด ์์ค์ฝ๋์ ๋ฃ์ด๋ฌ์ผํ๋๊ฒ ๋ง๋ค. ๋์ค์ ํน์ ์คํฌ๋ฆฝํธ๊ฐ ๋์ํ์ง ์์ ๋ณ๊ฒฝํ๋๋ผ๋ ๋ค์ ๊ณ ์น๋๋ผ๋ ์คํฌ๋ฆฝํธ๋ก ์๋ ์์ฑ์ด ๋์ผ ๊ฐ์ธ์ด ๊ทธ๋ฅ ๊ณ ์ณ๋ฒ๋ฆฌ๋๊ฒ๋ณด๋ค ๋ค์ ์์
ํ๋ ์ฌ๋์ด ๋ ์ฝ๊ฒ ์์
ํ ์ ์๋ค.
Run setup haproxy for Kubernetes masters
ENV=xxxx
ansible-playbook -i inventory/${ENV}/hosts.yml k8s-setup-haproxy-for-masters.yml -b -v
vip ํ์ธ
ping 172.16.4.10 #(vip) ์ด๊ฒ ์ ๋๋ฉด ์ฑ๊ณตํ๊ฑฐ๋ค.
keepalived ํ์ธ
๋ง์คํฐ ๋
ธ๋ ๊ฐ๊ฐ ๋ฐ๋ชฌ ์ํ ํ์ธ
ssh c4-master01.c4
sudo systemctl status keepalived
ip addr show ens4
ip addr show eth0
kubernetes ์ค์น
haproxy-for-k8s-masters ๊ด๋ จ ๋ด์ฉ ์์
group_vars/all/all.yml
## External LB example config
apiserver_loadbalancer_domain_name: 'api.c4'
loadbalancer_apiserver:
address: 172.16.4.10
port: 443
hosts ํ์ผ๋ ํ์ธ
kube-master:
hosts:
c4-master01:
vrrp_instance_state: MASTER
vrrp_instance_priority: 101
c4-master02:
vrrp_instance_state: BACKUP
vrrp_instance_priority: 100
c4-master03:
vrrp_instance_state: BACKUP
vrrp_instance_priority: 99
vars:
vrrp_interface: ens4
vrrp_instance_virtual_router_id: 103
์ด๋ ๊ฒ
๋ฒ์ ์ ํ
kubespray/roles/download/defaults/main.yml์์ ๋ฒ์ ์ ํ์ธํ ์ ์๋ค.
v1.20.0๋ก ์ ํ
cd /data/kube-on-premise/
vi inventory/${ENV}/group_vars/k8s_cluster/k8s-cluster.yml
kube_version: v1.20.0
cd kubespray
ansible-playbook -i inventory/${ENV}/hosts.yml cluster.yml -b -v
๋ฌธ์ ๋ค
์ค์น์ ํน์ ๋
ธ๋๋ ๋น ์ง๋๋ฏ ๋ณด์ ํน์ ๋
ธ๋๋ง ๋ฐ๋ก ์ค์นํ ์ ์ฒด๋ฅผ ๋ค์ ์คํํด์ฃผ์๋ค.
# ํ๊ฐ ๋
ธ๋
ansible-playbook -i inventory/${ENV}/hosts.yml cluster.yml -b -v --limits=c4-node01
# ์ ์ฒด ๋
ธ๋
ansible-playbook -i inventory/${ENV}/hosts.yml cluster.yml -b -v
์ํ ํ์ธ
kubectl --kubeconfig=inventory/${ENV}/artifacts/admin.conf cluster-info
> Kubernetes master is running at https://172.16.4.10:443
kubectl --kubeconfig=inventory/${ENV}/artifacts/admin.conf get nodes
> NAME STATUS ROLES AGE VERSION
> c4-master01 Ready master 64m v1.18.9
> c4-master02 Ready master 63m v1.18.9
> c4-master03 Ready master 63m v1.18.9
> c4-node01 Ready <none> 60m v1.18.9
> c4-node03 NotReady <none> 60m v1.18.9
์ ์ ์ค์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
cd /data/kube-on-premise/
git add --all && git commit -am server && git push
ENV=xxxx
scp maas:/data/kube-on-premise/kubespray/deploy/kubespray-2.17.0/inventory/${ENV}/artifacts/admin.conf ~/.kube/${ENV}
export KUBECONFIG=$PWD/inventory/${ENV}/artifacts/admin.conf
cp inventory/${ENV}/artifacts/admin.conf ~/.kube/c4-config
inventory/${ENV}/artifacts/ ์ ์๋ฒ ์ ์ํ ์ ์๋ ์ค์ ์ด ์๊ธด๋ค.
vi ~/.zshrc
export KUBECONFIG=~/.kube/config:~/.kube/c1-config:~/.kube/c2-config
์ ์ค์น๋์๋์ง ํ์ธํ๋ค.
remove all setup
ansible-playbook --flush-cache -i inventory/${ENV}/hosts.yml reset.yml --become -u root
argocd ์ค์น
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
๋น๋ฒ ์์๋ด๊ธฐ
k -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d && echo
NXXhjrWj7lDD54Xb
์ ์
k port-forward svc/argocd-server -n argocd 8080:443
http://localhost:8080/
update password
create repo for add
https://github.com/teamsmiley/devops-senima-argocd
๊ทธ๋ฆผ์ฒ๋ผ 2๊ฐ์ ํด๋๊ฐ ์๋ค
add-apps
์ฑ์ ์ถ๊ฐํ๊ธฐ ์ํ yaml
deploy
app ์์ฒด์ yaml์ ๋ฃ๋ ํด๋
๋๊ฐ์ ํด๋๋ ๋ค์ ๊ตฌ๋ถ๋๋ค.
core
์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ด์ํ๊ธฐ์ํด ๊ด๋ฆฌํด์ผํ๋ ์ฑ ํด๋
apps
์ฌ์ฉํ๋ ์ฑ์ ๋ฃ๋ ํด๋
add argocd repo to argocd
argocd login localhost:8080
argocd repo add git@github.com:teamsmiley/argocd-c4.git --ssh-private-key-path ~/.ssh/id_rsa
ui์์ ํ์ธ ๊ฐ๋ฅ
add core / apps
k apply -f add-apps/core/
k apply -f add-apps/apps/