Release file for URL is not valid yet ํด๊ฒฐ ๋ฐฉ๋ฒ
- kkumtree
2023-06-29T02:28:34+09:00
์ต๊ทผ WSL๋ฅผ ์ฐ๊ฒ ๋๋ฉด์, ํ ๊ฐ์ง ์ด์๊ฐ ์๊ฒผ๋ค.
APT repo๋ฅผ ์
๋ฐ์ดํธ ํ๋ฉด ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ด๊ฒ์ ๊ฒ ์๋๋ณด๊ณ ํด๊ฒฐ๋ฒ์ ์ ์ด๋ณด๊ณ ์ ํ๋ค.

์ค๋ฅ ์ฆ์์ ๋ฆด๋ฆฌ์ค ํ์ผ์ด ์กด์ฌํ์ง ์๋๋ฐ, 5๋ถ 1์ด๋์ ์ ํจํ์ง ์๋๋ค๊ณ ํ๋ค.
๋ฌด์จ ๋ง์ธ๊ฐ ์ถ์๋ฐ, 5๋ถ ์๋ค๊ฐ ์
๋ฐ์ดํธ ํด๋ณด๋ผ๋ ๊ฒ์ด๋ค.
์์ธ
์ค๋ซ๋์ ์ ์ ๋ชจ๋๋ก ๋์ด์ ์๊ฐ ๋๊ธฐํ๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
์ฌ๋ถํ
ํ์ง ์์ผ๋ ค๊ณ ํ๊ธฐ์, ํด๊ฒฐ์ ์ํด ๋ ๋ง์ ์๊ฐ์ ๋ณด๋๋ค.
Linux Runlevel - ๋ฐ๋ ๋ฒจ/๋ถํธ๋ ๋ฒจ
- kkumtree
2023-06-22T16:07:05+09:00
CPU๋ฅผ 1600X์์ 5700X๋ก ์
๊ทธ๋ ์ด๋๋ฅผ ์งํํ๊ธฐ์ ์์,
RunLevel(๋ฐ๋ ๋ฒจ/๋ถํธ๋ ๋ฒจ)์ ๋ํด ํ๋ฒ ๋ฉ๋ชจํ๊ณ ์ ํจ.
Runlevel
-
7๊ฐ์ง ๋ ๋ฒจ์ด ์กด์ฌ
- man runlevel ์ฐธ๊ณ
-
Level 5์ ์ ์ธํ๊ณ ๋, cli ํ๊ฒฝ์์๋ง ๊ตฌ๋
-
Linux Standard Base ๊ธฐ์ค
ls -l /lib/systemd/system/runlevel?.target๋ช ๋ น์ด๋ก ํ์ธ ๊ฐ๋ฅ
| RunLevel | EN | ์ค๋ช | ๋น๊ณ |
|---|---|---|---|
| 0 | Power Off | ์์คํ ์ข ๋ฃ(์ค๋จ/Halt) | |
| 1 | Rescue | ์์คํ ๋ณต๊ตฌ | ๋จ์ผ ์ฌ์ฉ์ ๋ชจ๋ |
| 2 | Multi-User | ๋ค์ค ์ฌ์ฉ์(ํ ์คํธ ๋ชจ๋, ๋คํธ์ํฌ ์๋น์ค X) | ์ฌ์ฉ X (์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅ) |
| 3 | Multi-User | ๋ค์ค ์ฌ์ฉ์(ํ ์คํธ ๋ชจ๋) | |
| 4 | Multi-User | ์๋ | ์ฌ์ฉ X (์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅ) |
| 5 | Graphical | ๋ค์ค ์ฌ์ฉ์ ๋ชจ๋ (๊ทธ๋ํฝ ๋ชจ๋) | X-window ๊ธฐ๋ฐ |
| 6 | Reboot | ์์คํ ๋ฆฌ๋ถํ |
์ด์์ฒด์ (Ubuntu 22.04 ๊ธฐ์ค)๋ด ํ์ธ
- su ๋ชจ๋์์. target์ ๊ธฐ๋ฐ์ผ๋ก ๋งํน๋์ด ์์์ ํ์ธ
ls -al /lib/systemd/system/runlevel?.target: defaultls -al /etc/systemd/system | grep runlevel?.target.wants: ์ฌ์ฉ์ ์ ์์ฉ ํด๋
sudo su
ls -l /lib/systemd/system/runlevel?.target*

Vagrant ์ค์น ๋ฐ Provider ์ง์
- kkumtree
2023-06-19T11:12:47+09:00
Ubuntu 23.04 (Host OS)์์ ๊ฐ๋จํ๊ฒ Vagrant ์ฌ์ฉ์ ํด๋ณด๊ณ , VBox๊ฐ ์๋ Docker๋ฅผ Provider๋ก ์ง์ ํ์ฌ ์ฌ์ฉํด๋ณธ๋ค.
- WSL2 ํ๊ฒฝ์์๋ Vagrant๊ฐ ์๋ํ๋๋ก ์๋ํ์ง ์์ผ๋ฏ๋ก ์ ์: ๋ณ๋์ ์ค์ ํ์
Vagrant ์ค์น
- Ubuntu 22.04 LTS ๋ฐ 23.10 ๊ธฐ์ค, APT repo๋ฅผ ํตํ ์ค์น ์ง์
sudo apt-get install vagrant
VBox ์ค์น(์ฌ์ฉ ์)
- CPU ๊ฐ์ํ ๊ธฐ์ ํ์ฑํ ํ์(BIOS๋จ, AMD์ ๊ฒฝ์ฐ๋ SVM, Intel์ ๊ฒฝ์ฐ๋ VT-x)


- virtualbox-ext-pack(์ ํ): USB 2.0/3.0 ์ง์ ๋ฑ์ ํ์ฅ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ค์น
- ๊ฐ์ธ์ฉ๋์ ์ ํ์ ๋ผ์ด์ ์ค(๋์๋ฅผ ์ํ ๋ํ์ฐฝ ํ์ธ)
- ํ์ฅ๊ธฐ๋ฅ์ ์ธ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค์นํ์ง ์๋ํจ
sudo apt-get install virtualbox
# sudo apt-get install virtualbox-ext-pack
Docker ์ค์น(์ฌ์ฉ ์)
- Ubuntu ๊ธฐ์ค, ์๋ 3๊ฐ์ง ์ค์น ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก, ์น์ํ ๋ชจ๋๋ก ์งํ
sudo snap install docker # ์ต์ ๋ฒ์
sudo apt-get install docker.io
sudo apt-get install podman-docker
- Docker ๊ถํ ๋ถ์ฌ: ๋ผ์ด๋ธ ์๋น์ค ์ ๊ถํ ์ ์ (Docker Docs)
- Docker ๊ทธ๋ฃน์ ํ์ฌ ์ฌ์ฉ์ ์ถ๊ฐ
- Docker ๊ทธ๋ฃน์ ์ํ ์ฌ์ฉ์๋ sudo ์์ด๋ Docker ์ฌ์ฉ ๊ฐ๋ฅ
sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker
- (์ฐธ๊ณ ) Docker ๊ณต์ Docs์ ์์ ๋ Docker Engine ์ค์น ๋ฐฉ๋ฒ
- Docker Docs: Install Docker Engine on Ubuntu
Vagrantfile ์์ฑ
VBox ์ฌ์ฉ ์
- Snippet: Gist
- CPU: 1Core / RAM: 1024MB
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.define "ubuntu" do |ubuntu|
ubuntu.vm.hostname = "kkumtree-server"
ubuntu.vm.provider "virtualbox" do |vb|
vb.name = "ubuntu-server"
vb.cpus = 1
vb.memory = 1024
end
ubuntu.vm.network "private_network", ip: "192.168.56.99"
ubuntu.vm.provision "shell", inline: <<-SCRIPT
sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
sudo useradd kkumtree -m -s /bin/bash
sudo usermod -a -G sudo kkumtree
echo kkumtree:kkumtree | sudo chpasswd
sudo systemctl restart sshd
SCRIPT
end
end
Docker ์ฌ์ฉ ์
- Vagrantfile๊ณผ Dockerfile์ ๊ฐ์ ํด๋์ ์์์ ์ ์ , ์๋ ๊ฒฝ์ฐ d.build_dir ํ๋ผ๋ฏธํฐ ์์ .
- ์๋์ฒ๋ผ ๋ค๋ฅธ ํด๋๋ฅผ ์ง์ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ

AWS EKS ์คํฐ๋ 7์ฃผ์ฐจ - Automation
- kkumtree
2023-06-10T15:13:19+09:00
EKS ์คํฐ๋๋ ๋ง์ง๋ง 7์ฃผ์ฐจ๋ฅผ ๋ง์ดํ์ต๋๋ค.
์ด๋ฒ์๋ AWS Controller for k8s(ACK)์ flux๋ฅผ ๊ฐ๋ณ๊ฒ ์ค์ตํด๋ณด๊ณ
์๋ํ์ ๋ํด ๋ง๋ณด๊ธฐ๋ฅผ ํด๋ณด์์ต๋๋ค.
์์ ํ์ตํด๋ณธ IRSA ๊ฐ๋ ์ธ์๋ CRD(CustomResourceDefinition)์ ํ์ฉํฉ๋๋ค.
1. ์ค์ตํ๊ฒฝ ๋ฐฐํฌ
์ค์ต์ ์ํ YAMLํ์ผ์ด ๋ณ๊ฒฝ๋๊ฑฐ ๋ง๊ณ ๋ 6์ฃผ์ฐจ์ ์ ์ฌํฉ๋๋ค.
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick6.yaml
# ์ดํ ์ค๋ต
# CERT_ARN(ACM)์ ๊ฒฝ์ฐ์๋ /etc/profile์ ํ๊ฒฝ๋ณ์ ์ ์ฅ์ ์ํด๋ฌ์
# ์ธ์
์ด ๋ง๋ฃ๋๋ฉด, ๋ค์ ์ฌ์ค์ ํ์
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN
2. ACK(AWS Controller for k8s)
- ์น์ฝ์์ ์ ๊ทผํ์ง ์๊ณ ๋, AWS ์๋น์ค ๋ฆฌ์์ค๋ฅผ ์ง์ k8s์์ ์ ์ ๋ฐ ์ฌ์ฉ๊ฐ๋ฅ
- ์์: ACK ์ปจํธ๋กค๋ฌ ์ค์น -> IRSA ์ค์ -> AWS ๋ฆฌ์์ค ์ปจํธ๋กค
- ๊ฐ์ ํจํด์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋๋ฐ, Cloudformation์ ์ฐ๋ค๋ณด๋ ์ค๊ฐ์ค๊ฐ ๋๊ธฐ ์๊ฐ ๋ฐ์
- (23/05/29) GA: 17๊ฐ ์๋น์ค, Preview: 10๊ฐ ์๋น์ค
2-1. S3
- [ACK S3 Controller ์ค์น]
# ์๋น์ค๋ช
๋ณ์ ์ง์
export SERVICE=s3
# helm ์ฐจํธ ๋ค์ด๋ก๋
export RELEASE_VERSION=$(curl -sL https://api.github.com/repos/aws-controllers-k8s/$SERVICE-controller/releases/latest | grep '"tag_name":' | cut -d'"' -f4 | cut -c 2-)
helm pull oci://public.ecr.aws/aws-controllers-k8s/$SERVICE-chart --version=$RELEASE_VERSION
tar xzvf $SERVICE-chart-$RELEASE_VERSION.tgz
# helm chart ํ์ธ
tree ~/$SERVICE-chart
# ACK S3 Controller ์ค์น
export ACK_SYSTEM_NAMESPACE=ack-system
export AWS_REGION=ap-northeast-2
helm install --create-namespace -n $ACK_SYSTEM_NAMESPACE ack-$SERVICE-controller --set aws.region="$AWS_REGION" ~/$SERVICE-chart
# ์ค์น ํ์ธ
helm list --namespace $ACK_SYSTEM_NAMESPACE
kubectl -n ack-system get pods
kubectl get crd | grep $SERVICE
kubectl get all -n ack-system
kubectl get-all -n ack-system
kubectl describe sa -n ack-system ack-s3-controller
- [IRSA ์ค์ ] AmazonS3FullAccess
- ์ค์ ํ์๋ rollout์ผ๋ก ๋ฐ์ํด์ฃผ์ด์ผํจ
# Create an iamserviceaccount - AWS IAM role bound to a Kubernetes service account
eksctl create iamserviceaccount \
--name ack-$SERVICE-controller \
--namespace ack-system \
--cluster $CLUSTER_NAME \
--attach-policy-arn $(aws iam list-policies --query 'Policies[?PolicyName==`AmazonS3FullAccess`].Arn' --output text) \
--override-existing-serviceaccounts --approve
# ํ์ธ
eksctl get iamserviceaccount --cluster $CLUSTER_NAME
kubectl get sa -n ack-system
kubectl describe sa ack-$SERVICE-controller -n ack-system
# Restart ACK service controller deployment using the following commands.
kubectl -n ack-system rollout restart deploy ack-$SERVICE-controller-$SERVICE-chart
# IRSA ์ ์ฉ์ผ๋ก Env, projected Volume ์ถ๊ฐ ํ์ธ
kubectl describe pod -n ack-system -l k8s-app=$SERVICE-chart

gh-pages์ ๋๊ธ ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ(giscus/Hugo)
- kkumtree
2023-06-04T09:15:14+09:00
์์ฝ
์์ผ๋ก ๊ฐ๊ฐ์๋ ํผ๋๋ฐฑ ํ์ํฉ๋๋ค.
https://github.com/kkumtree/blog.minseong.xyz/commit/e17822e72e8d357dcdbda1025c5372161a7b93ff
๋ฐฐ๊ฒฝ
gh-pages๋ก ๋ธ๋ก๊ทธ๋ฅผ ๊ตฌ์ถํด์, ์ฒซ ๊ฒ์๋ฌผ์ ์ฌ๋ฆฐ ์ง ๋ง 4๊ฐ์์ด ์ง๋ฌ๋ค.
๊ตฌ์ถ๊ธฐ๋ ๋์ค์ ์ฌ๋ ค์ผ์ง.
๊ธํ ๋ฒค์น๋งํนํด์ ์ฌ๋ฆฐ๊ฑฐ๋ผ, ๋ถ์กฑํ ์ ์ ๋ง์ง๋ง ๊ฐ์ฅ ์ค์ํ ๋๊ธ ๊ธฐ๋ฅ์ด ์์ด์ ์์ฌ์ ๋ค.
์๋๋ ๋๊ธ์ ๋ฌ์ง ์์ผ๋ ค๊ณ ํ๋๋ฐ,
- ๋ถ์กฑํ ๋ถ๋ถ์ ๋ํด์ ์กฐ์ธ๋ ๋ฐ์๋ณด๊ณ ์ถ๊ณ
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์ดํด๊ฐ ์๋๋ ๋ถ๋ถ์ ๋ํด์ ํผ๋๋ฐฑ๋ ๋ฐ๊ณ ์ถ์๋ค.
๋ค๋ฅธ ๋ธ๋ก๊ทธ์์ ๋ต์ ์ฐพ์ผ๋ ค๊ณ ๊ฒ์์์ง์ ๋๋ฆฌ๋ฉด, ๋ญ๊ฐ 2% ๋ถ์กฑํ๊ฑฐ๋ / ๋ด๊ฐ ์ํ๋ ํด๋ต์ด ์๋๊ฑฐ๋ / ๋งค๋ฒ ์ด๋ชจํฐ์ฝ์ผ๋ก ๋๋๋ ํน์ ์ ํํ๊ฐ์ผ๋ก ์ง์ฆ์ด ๋ฐ๋ ค์์ ๋ฒ์ญ๊ธฐ ๋๋ ค๊ฐ๋ฉฐ ๊ตญ์ธ ํฌ์คํธ๋ ๋ฌธ์๋ฅผ ๋ณด๋ค๋ณด๋, ๋ฐ๋๋ก ๋ด ๊ธ๋ ํฐ ๋์์ด ๋์ง ๋ชปํ ๊ฒฝ์ฐ๋ ์๊ฒ ๋ค ์ถ์๋ค. ๊ทธ๋์ ๋๊ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ๋ก ํ๋ค.
AWS EKS ์คํฐ๋ 6์ฃผ์ฐจ - Security
- kkumtree
2023-06-04T06:56:52+09:00
์ด๋ฒ์๋ ๋ณด์์ ์ํ ์ธ์ฆ ๋ฐ ์ธ๊ฐ, ๊ทธ๋ฆฌ๊ณ IRSA๋ฅผ ์ค์ฌ์ผ๋ก EKS์ ๋ณด์์ ๋ํด ํ์ตํด๋ณด์์ต๋๋ค.
kops ์คํฐ๋ ๋์๋ ์ ๋ชฐ๋๋๋ฐ, RBAC ๋ฟ๋ง ์๋๋ผ ๋ณต๊ธฐํ๋ค๋ณด๋…
- [4-1] projected Volume
- [4-2] AWS Load Balancer Controller IRSA ๋ฐ LB Pod mutating
์์ ๋ ๊ฐ์ง๊ฐ ์ค์ํ ํํธ๋ฅผ ์ฐจ์งํ๊ณ ์์์์ ์ ์ ์์์ต๋๋ค.
Network(2์ฃผ์ฐจ)๊ฐ ๋งค๋ฒ ๋ญ๊ฐ ์ผ๋ถ๊ฐ ์๋ฆฌ์กํ์๋ค๋ฉด
Security๋ ๋ณต๊ธฐํ๋ค๊ฐ ์ด๋ก ์ ์ผ๋ก๋ ๊ฐ๋จ(๊ณผ์ฐ?)ํด๋ณด์ฌ๋
์ค์ ๊ตฌ๋๋ฐฉ์ ์ดํด ์์ฒด๊ฐ ์ด๋ฐ์ ์๋์, ์ฌํ ๋จ์ง ๊ฑธ๋ฆฐ ๋์ ๋ ์ด๋ ค์ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ ์ธ
- myeks-bastion-2์ ์ ์ ์, ํจ๊ป ์งํํ ๋๋
ssh {Public IP}๋ก ์ ์ ์๋๋ ๊ฑธ ๋ดค๋๋ฐ ์ ์ ํผ์ ํ ๋ ์ ์์ด ๋์ง์์์ต๋๋ค.- Amazon Linux์์๋ ssh ec2-user@{Public IP}๋ก ์ ์ํด์ผํจ
(ํ์ํ ๊ฒฝ์ฐ sshํค๋ ํฌํจ) - AWS Public AMI์์ ์ ๊ณต๋๋ Ubuntu AMI์ ๊ฒฝ์ฐ,
ubuntu@{Public IP}๋ก ์ ์๊ฐ๋ฅ - ์ถ์ : ๊ณต์ ๋ ๋จธ์ ์ ๋ค๋ฅธ ์ค์ ์ด ์ด์๊ฐ ๋๋ ๊ฒ์ผ๋ก ์ถ์ ๋ฉ๋๋ค.

- Amazon Linux์์๋ ssh ec2-user@{Public IP}๋ก ์ ์ํด์ผํจ
- IAM User(testuser)๋ ์น์ฝ์์์ ์ญ์ ํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
- ์๋๋ฉด, ์๋์ฒ๋ผ detach ํ๋ค๋ ๋๋์ผ๋ก ์์ฐจ์ ์คํํฉ๋๋ค.
- list-attached-role-policies && detach-role-policy
- list-access-keys && delete-access-key
- delete-user

- ์๋๋ฉด, ์๋์ฒ๋ผ detach ํ๋ค๋ ๋๋์ผ๋ก ์์ฐจ์ ์คํํฉ๋๋ค.
- CLI๋ก IAM Trust Relationship ์กฐํ
- ์น ์ฝ์์ ๊ตณ์ด ๋ค์ด๊ฐ์ผํ๋ ํ๊ณ , ๋ฌธ๋ ํธ๊ธฐ์ฌ์ ์๋ํ๋ค๊ฐ ์๊ฐ์ด ๋ ์๊ฐ์ต๋๋ค.
- ๊ฒฐ๋ก : ํ๋์ฝ์ดํ ํ์ฑ..
jq -r '.[].status.roleARN' | rev | cut -d '/' -f1 | rev- chatGPT์๊ฒ ์๋์ ๊ฐ์ด ๊ต์ ๋ฐ์์ง๋ง, ํํ์น ์์..
jq -r '.[].status.roleARN' | grep -oE '[^/]+$'

1. ์ค์ต ํ๊ฒฝ ๋ฐฐํฌ
- ๋ชจ์๊ณต๊ฒฉ(?) ํ ์คํธ๋ฅผ ์ํด 2๊ฐ์ bastion ์๋ฒ๊ฐ ๊ตฌ์ฑ๋ ํ๊ฒฝ ๋ฐฐํฌ
- p8s ๋ฐ grafana์ ๊ฒฝ์ฐ, ์ ํ์ ์ผ๋ก ๋ฐฐํฌํด๋ ๋์ ๊ธฐ์ ์๋ต
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick5.yaml
# ์ดํ ์ค๋ต
# CERT_ARN(ACM)์ ๊ฒฝ์ฐ์๋ /etc/profile์ ํ๊ฒฝ๋ณ์ ์ ์ฅ์ ์ํด๋ฌ์
# ์ธ์
์ด ๋ง๋ฃ๋๋ฉด, ๋ค์ ์ฌ์ค์ ํ์
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN
2. k8s ์ธ์ฆ/์ธ๊ฐ
.kube/configํ์ผ์ ๊ธฐ๋ฐ- cluster: k8s API ์๋ฒ ์ ์์ ๋ณด
- users: API ์๋ฒ์ ์ ์ํ๊ธฐ ์ํ ์ ์ ์ธ์ฆ์ ๋ณด ๋ชฉ๋ก
- contexts: cluster๋ฐ user๋ฅผ ๋งคํ(์กฐํฉ)ํ ์ ๋ณด

GnuPG ํค ๋ฐฑ์ ํ๊ธฐ
- kkumtree
2023-05-27T18:29:18+09:00
23/05/30 GPG ํค ๋ณต์๋ฐฉ๋ฒ ๋ฐ ์ถ์ฒ ์ถ๊ฐ
๋ง๊ฐ์ง PC ๋ฉ์ธ๋ณด๋๋ฅผ ๊ต์ฒดํ๊ณ , ์๋๋ฌ GPG key๋ฅผ ๋ฐฑ์
ํ์์ต๋๋ค.
์ฉ๋์ด ๊ทธ๋ฆฌ ํฐํธ์ ์๋๋, ์ ๋งํ USB ๋ฉ๋ชจ๋ฆฌ์๋ ์ถฉ๋ถํ ๋ฐฑ์
์ด ๊ฐ๋ฅํฉ๋๋ค.
(์ด์งธ์ ์ํ์์๊ผฌ…)
์ถ์ฒ๋ ๋ง์ง๋ง referenece๋ฅผ ์ฐธ์กฐํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
1. Backup
# tree๋ก ~/.gnupg ํ์ธ
tree ~/.gnupg
# ํ์ฌ ์ฌ์ฉ์ค์ธ ํค ํ์ธ
gpg --list-secret-keys --keyid-format LONG
# ํค ๋ฐฑ์
## public ํค ๋ฐฑ์
gpg --export --export-options backup --output ~/public_mscho.gpg
## private ํค ๋ฐฑ์
(์ํธ ์
๋ ฅ ํ์)
gpg --export-secret-keys --export-options backup --output ~/private_mscho.gpg
## trust(์ ๋ขฐ๊ด๊ฒ) ๋ฐฑ์
gpg --export-ownertrust > trust_mscho.gpg
# ๋ฐฑ์
ํ ํค ํ์ธ
ls -al ~/*.gpg
# ๋ฐฑ์
ํ ํค๋ฅผ USB๋ก ๋ณต์ฌ
## ์ด๋ฏธ ๋ง์ดํธ๋ ๋ฏธ๋์ด ํ์ธ(๋ณผ๋ฅจ์ด๋ฆ KEYS์ ๋ณด๊ดํ ๊ณํ)
tree /media
## (์ต์
)ํ์ ํด๋ ์์ฑ
mkdir /media/KEYS/GnuPG
## ํค ๋ณต์ฌ
cp ~/*.gpg /media/KEYS/GnuPG
## ๋ณต์ฌํ ํค ํ์ธ
ls -al /media/kkumtree/KEYS/GnuPG/*.gpg

AWS EKS ์คํฐ๋ 5์ฃผ์ฐจ - Autoscaling
- kkumtree
2023-05-22T19:23:37+09:00
์ด๋ฒ ์ฃผ์ฐจ๋ ์คํ ์ค์ผ์ผ๋ง์ ๋ฉ์ธ์ผ๋ก ํ์ฌ, ์ํ/์์ง ํ๋ก๋น์ ๋์ ํ์ตํด๋ณด์์ต๋๋ค.
๋ง์ง๋ง์๋ ๊ณ ์ฑ๋ฅ ์คํ ์ค์ผ์ผ๋ฌ์ธ Karpenter๋ฅผ ๋ณ๋๋ก ์ค์ตํด๋ณด์์ต๋๋ค.
ํนํ..
-
HPA custom metrics(์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ) ์ ์ฉ
-
YAML ์ค์ ๊ฐ์ CPU๋ก ๋ง์ถ ๊ฒ์ ์๊ณ , ํ๋ก๋น์ ๋์ ์๋ชป ์์ธกํ ๊ฒ๋ ํจ๊ป ๊ณต์ ํฉ๋๋ค.
-
AutoScaling
- HPA: Horizontal Pod Autoscaler
- VPA: Vertical Pod Autoscaler
- CA: Cluster Autoscaler
- ๊ฐ CSP ์์กด์ , ์์ปค ๋ ธ๋ ๋ ๋ฒจ์์์ ์คํ ์ค์ผ์ผ๋ง
1. ์ค์ต ํ๊ฒฝ ๋ฐฐํฌ
- 4์ฃผ์ฐจ์ ์ด๊ธฐ ๋ฐฐํฌ ๋ด์ฉ์ p8s ๋ฐ Grafana๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐฐํฌ
- verticalPodAutoscaler ํ์ฑํ
- ์ถ์ฒ ๋์๋ณด๋: 15757, 17900, 15172
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick4.yaml
# ์ดํ ์ค๋ต
## Prometheus & Grafana ์ค์น
# ์ธ์ฆ์ ARN
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN
# ํ๋ผ๋ฏธํฐ ํ์ผ ์์ฑ ๋ฐ ๋ฐฐํฌ
cat <<EOT > monitor-values.yaml
prometheus:
prometheusSpec:
podMonitorSelectorNilUsesHelmValues: false
serviceMonitorSelectorNilUsesHelmValues: false
retention: 5d
retentionSize: "10GiB"
verticalPodAutoscaler:
enabled: true
ingress:
enabled: true
ingressClassName: alb
hosts:
- prometheus.$MyDomain
paths:
- /*
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
alb.ingress.kubernetes.io/group.name: study
alb.ingress.kubernetes.io/ssl-redirect: '443'
grafana:
defaultDashboardsTimezone: Asia/Seoul
adminPassword: prom-operator
ingress:
enabled: true
ingressClassName: alb
hosts:
- grafana.$MyDomain
paths:
- /*
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
alb.ingress.kubernetes.io/group.name: study
alb.ingress.kubernetes.io/ssl-redirect: '443'
defaultRules:
create: false
kubeControllerManager:
enabled: false
kubeEtcd:
enabled: false
kubeScheduler:
enabled: false
alertmanager:
enabled: false
EOT
kubectl create ns monitoring
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.27.2 \
--set prometheus.prometheusSpec.scrapeInterval='15s' --set prometheus.prometheusSpec.evaluationInterval='15s' \
-f monitor-values.yaml --namespace monitoring
# metrics-server ๋ฐฐํฌ
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
1-1. EKS Node Viewer ์ค์น
- ํ๋ ๋ฆฌ์์ค์ ๋ํ ์์ฒญ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ ๋์๋ณด๋
- ํด๋น ๋ ธ๋์ ํ ๋น ๊ฐ๋ฅํ ์ฉ๋์ ์๊ฐ์ ์ผ๋ก ํ์
- ์ค์ ์ฌ์ฉ๋์ด ์๋๋ผ, ์์ฒญ๋ ๋ฆฌ์์ค(CPU, Memory)์ ๋ํ ํ์
- ์ค์ต ์ค์ฑ ์์์ go ์ค์น ๋ฐ ๋ทฐ์ด ์ค์น์ ๋ค์ ์๊ฐ์ด ์์ (์ฝ 5๋ถ)
- Karpenter ์ค์ต ์์๋ ์ธ๊ธ๋๊ฒ ์ง๋ง, EKS๊ฐ ๊ตฌ์ถ๋ ๋ค์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
# go ๋ฐ EKS Node Viewer ์ค์น
yum install -y go
go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest
# EKS Node Viewer ์คํ
tree ~/go/bin
cd ~/go/bin && ./eks-node-viewer
## EKS Node Viewer ๋ช
๋ น ์ํ
# Display both CPU and Memory Usage
./eks-node-viewer --resources cpu,memory
# Karenter nodes only
./eks-node-viewer --node-selector "karpenter.sh/provisioner-name"
# Display extra labels, i.e. AZ
./eks-node-viewer --extra-labels topology.kubernetes.io/zone
# Specify a particular AWS profile and region
AWS_PROFILE=myprofile AWS_REGION=ap-northeast-2
## ๊ธฐ๋ณธ ์ต์
ํ๊ฒฝ ๋ณ์
# select only Karpenter managed nodes
node-selector=karpenter.sh/provisioner-name
# display both CPU and memory
resources=cpu,memory

AWS EKS ์คํฐ๋ 4์ฃผ์ฐจ - Observability
- kkumtree
2023-05-21T06:13:52+09:00
์ด๋ฒ ์ฃผ์ฐจ์๋ Observability์ ๋ํด ์คํฐ๋๊ฐ ์งํ๋์์ต๋๋ค.
์์ ๋ชจ๋ํฐ๋ง ํด๋ค์ ์ ์ฉ ๋ฐ ์ฌ์ฉ์ด ์ค์ฌ์
๋๋ค.
๊ทธ๋์ ๋ k8s 1.26์์ metrics์ ์ผ๋ถ ๋ช
์นญ์ด ๋ฐ๋๋ ๊ฑธ ๋ณด๊ณ ์๊ฒํ์ต๋๋ค.
(etcd_db_total_size_bytes ๋์ , apiserver_storage_db_total_size_in_bytes ์ผ๋ก ๋ณ๊ฒฝ)
๋ํ kubecost์ ๊ฒฝ์ฐ, cloudformation ์คํ ์ ๊ฑฐ ํ์๋ ๋ณผ๋ฅจ ๋ฐ์ดํฐ๊ฐ ๋จ์์์ด์ ๋ณ๋๋ก ์ญ์ ํด์ผ ํ์ต๋๋ค.
1. ์ค์ตํ๊ฒฝ ๋ฐฐํฌ
- NAT๊ฒ์ดํธ์จ์ด, EBS addon, IAM role, ISRA for LB/EFS, PreCommand ํฌํจ
- ๋
ธ๋: t3.xlarge
- t3a.xlarge(AMD)๋ ์์ธ ๋ฆฌ์ b AZ(ap-northeast-2b)์์ ๋ฏธ์ง์
- ๋ ๋ง์ ๊ฐ๋ค์ด ์ ๋ ฅ๋์ด์, ์์ฑ ์๋ฃ๊น์ง ๋ ๋ง์ ์๊ฐ์ด ์์ (์ฝ 20์ฌ๋ถ ์ด๋ด)
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick3.yaml
# ์ดํ ์๋ต, 3์ฃผ์ฐจ ์ฐธ๊ณ

aws-cli๋ฅผ ์ด์ฉํ bastion CIDR ๋ณ๊ฒฝ
- kkumtree
2023-05-18T21:36:19+09:00
0. ์์ฝ
aws ec2 describe-security-groups
aws ec2 modify-security-group-rules
1. ๋ฐฐ๊ฒฝ

2์ฃผ ์ ์ ๋ฌธ๋ ์ด๋ฐ ์ง๋ฌธ์ ์ฌ๋ ธ๋ ์ ์ด ์์๋ค.
๋ฌผ๋ก ๋ฐ๊พธ๋ฉด ์๋ ์ผ์ ์์๋๋ฐ ์ด๋ ๊ฒ ํ๋๊ฒ ๋ง๋ ํ์ ์ด ๋ชจ์๋ผ์ ์๊ฒฌ์ ์ฌ์ญค๋ดค์๊ณ ,
์ด๊ฒ ๋ง๋ค๋ ํ์ ์ ๋ฐ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ค๋… ์นดํ๋ฅผ ๋ ๊ณณ์ด๋ ๋ค๋ฆฌ๋ฉด์ ํ๋๋ผ ์ฝ๊ฐ์ ๋ฒ๊ฑฐ๋ก์๋ ์๊ณ AWS ์น ์ฝ์์์ ํ๋ ค ํ๋ค.
๊ทธ๋ฐ๋ฐ, ์ ๋
SG์์๋ง ํ์ด์ง ๋ก๋ฉ์ด timeout ๊ฑธ๋ ค์,
๋์ ํ ์์ ์ ์ปค๋
ํด๋น ID๋ ํ์
์ ํ๊ธฐ ํ๋ ์ํฉ์ด ๋์๋ค.