https://k8slens.dev/
GUI를 제공해줌
### 관리자권한으로 터미널 시작
choco install lens
### 이후 구글 계정으로 로그인
Pod에 shell이 있다면 터미널 접속도 가능
### 관리자 권한으로 터미널 실행
choco install k9s
k9s
이런식으로 cli모드임
이런걸 tui라고 하기도 함 (메뉴기반)
vscode에도 kubernetes를 설치할 수 있다.
### 관리자 권한으로 터미널 실행
choco install kubernetes-helm
이런식으로 필수 구성 템플릿이 자동으로 나옴
다 완성하고 나면
이렇게 하면 create가 됨
간단하게 올려서 테스트해봐야하는 경우
https://minikube.sigs.k8s.io/docs/start/
### 관리자권한으로 터미널 실행
choco install minikube
minikube start
이런석으로 가상머신이 자동으로 생성된거 확인
kubectl
kubectl get nodes
동적프로비저닝을 위해 만들어져있음
minikube stop
kubectl config view
이런식으로 minikube의 클러스터가 추가된 것을 확인할 수 있다.
멀티클러스터를 사용할 때 내가 지금 어떤 contexts로 실행하고 있는지 조심해서 사용하기를 바람
mknikube ssh
cat /etc/os-release
### 보면 자체적으로 만든 os인 것을 확인할 수 있다.
### 그리고 설치된 것은 docker만 있음
choco install docker-cli
minikube docker-env
mknikube -p minikube docker-env --shell powershell | Invoke-Expression
docker ps
### 참고로 변수는 해당하는 터미널창 내에서만 유효함
minikube delete #vm을 삭제함
minikube status
mknikube start --help
minikube start --cpus 4 --memory 4G --disk-size 30G --kubernetes-version v1.22.9
나중에 여기에 사용하지 않는 이미지들이 쌓일 수 있으므로 잘 관리하기를 바람
minikube node list
mknikube node add #kubeadm join은 알아서 해줌
minikube node list
mknikube ip #minikube control plane의 ip를 볼 수 있음
kubectl create deployment myapp --image nginx --replicas 3
kubectl expose deployment myapp --name mysvc --port 80 --target-port 80
kubectl edit svc mysvc
kubectl get svc
minikube service list
loadbalacer로 바꾸면 외부ip가 pending상태가 된다.
물론 이렇게도 할 수 있지만
minikube addons list
minikube addons enable metrics-server
kubectl get po -n kube-system
minikube addons enable metallb
kubectl get svc
여전히 pending 상태이다.
enable한다고 제대로 작동하지는 않는다.
minikube addons disable metallb
minikube delete
minikube start --cpus 2 --memory 4G --kubernetes-version v1.22.9
config를 해주고 enable해주어야 제대로 작동한다고 한다.
이 부분을 제대로 구성해주어야한다.
minikube addons enable metrics-server
minikube addons enable ingress
minikube addons configure metallb
minikube ip
kubectl create deploy myapp -image nginx --replicas 3
kubectl expose deploy myapp --name mysvc
...
minikube addons list
minikube config
minikube config set cpu 2
minikube config set memory 4G
minikube config set driver virtualbox
minikube config set kubernetes-verison v1.22.9
minikube config view
kubectl config view
choco install eksctl
choco install awscli
choco install aws-iam-authenticator
###안되면 재부팅
/서비스IAM/사용자/사용자추가
aws configure
###액세스키 시크릿키 넣고..
### ap-northeast-2 해주고
aws sts get-caller-identitiy
aws s3 ls
eksctl create cluster --name myeks --nodes=3 --region=ap-northeast-2
설치되는데 시간이 꽤 걸림..
https://kubernetes.io/ko/docs/concepts/cluster-administration/networking/
이것도 클러스터를 구성할 때 이런 yaml파일을 만들 수 있다.
https://eksctl.io/usage/schema/
이걸 참고해서 만들면 된다.
/서비스/EC2/인스턴스/
/서비스/EC2/볼륨/
/서비스/EC2/인스턴스/시작템플릿
/서비스/EC2/AutoScaling/Auto Scaling그룹
kubectl config view
kubectl config get-contexts
kubectl get nodes
이건 다 Workernode이다
지금까지 했던 내용들을 해보고 뭐가 되고 뭐가 안되는지 확인해볼 필요가 있다고 한다.
여기서 삭제
해버리면 cli상태에서 알고있는 상태와 다르기 때문에 꼬이게 된다고 한다.
그래서 eksctl delete
해서 지워야한다.
보안그룹을 해주어야함
인그레스는 안만들어짐
ingress controller가 있어야 작동을 할 수 있다고 한다.
kubectl get sc
Pod를 하나 만들어주어야함..
WaitForFistConsumer는 꼭 Pod를 할당해주어야함
Metrics-server가 없어서 안보임
** 강의자료 받아오기
mkdir keypair
ssh-keygen -f keypair/myssh
이렇게 하면 해당 계정에 권한을 줌
https://eksctl.io/usage/cloudwatch-cluster-logging/
이 5가지 로그를 cloud watch에 남기겠다는 의미
EKS Anywhere는 타사 또는 온프램 관리를 할 수 있는 기능임
eksctl get clusters
eksctl delete cluster --name myeks #아까 실습한거 삭제
eksctl get cluster
eksctl get fargateprofile --cluster myeks-custom
eksctl get nodegroup --cluster myeks-custom
eksctl get iamserviceaccount --cluster myeks-custom
kubectl config get-contexts
kubtctl config use-context eksadm....
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/network-load-balancing.html
Fargate는 clasic LB로는 연결이 안됨
그래서 nlb를 만들어야함
apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb-deploy
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: myweb
image: ghcr.io/c1t1d0s7/go-myweb
ports:
- containerPort: 8080
apiVersion: v1
kind: Service
metadata:
name: myweb-svc-lb
spec:
type: LoadBalancer
selector:
app: web
ports:
- port: 80
targetPort: 8080
이렇게 주석을 붙여주어야함
둘다 create해주고
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/alb-ingress.html
이건 이미 구성된거임
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/aws-load-balancer-controller.html
helm 설치해주어야함
choco install kubernetes-helm
helm repo add eks https://aws
helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=myeks-custom --set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controller --set image.repository=602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/amazon/aws-load-balancer-controller
### id확인 잘해야함
Nodeport로 하는게 아니라 Pod에 직접 연결할 수 있어서 Fargate에도 연결할 수 있다
내부용이라 외부에서 접속할 수가 없다.
이렇게해야 퍼블릭이 가능
apply
해주고
이것도 아직 내부용
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myweb-ing
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/target-type: instance
alb.ingress.kubernetes.io/scheme: internet-facing
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myweb-svc-lb
port:
number: 80
apply 후 test하고
이제 다시 다 지우고..
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/managing-ebs-csi.html
문서의
여기까지 완성이 된 상태이고
eksctl get iamserviceaccount --cluster myeks-custom
### 알맞게 수정해주어야함
eksctl create addon --name aws-ebs-csi-driver --cluster myeks-custom --service-account-role-arn arn:aws:iam::065144736597:role/eksctl-myeks-custom-addon-iamserviceaccount-Role1-15HLE8HBOD9CN --force
kubectl get po -n kube-system
kubectl get sc
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/metrics-server.html
eksctl scale
eksctl nodegroup --name
수동 스케일링
자동스케일링
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/autoscaling.html
수정하고..
spec에.. template에..
요렇게 추가해주고 수정해주고..
이부분도 수정해주어야한다
kubectl set image deployment cluster-autoscaler -n kube-system cluster-autoscaler=k8s.gcr.io/autoscaling/cluster-autoscaler:v1.22.2
지금 거의 작업이 없기 때문에 scale down될것이라고 함..
Pod를 request를 설정해서 계속 만들어서 cpu사용량을 늘려버리면 Node가 하나 더 추가되는 것도 볼 수 있다고 하심
![](https://velog.velcdn.com/images/repush/post/f009d0aa-d9ec-4651-800e-09007157fc5b/image.png)
kubectl logs -n kube-system deploy/cluster-autoscaler -f
pending걸려있다
이런 다양한 label들이 있다.. 이걸 나중에 affanity anti-affanity를 할 수 있음
log를 fluent bit이 받아서 cloutwatch에게 넘겨준다.
여기서 나온것이 쉘스크립트라서 변경을 해주어야한다.
디폴트로 다 그냥 설치
서비스/cloudwatch/로그/로그그룹
로그가 만기없으면 계속 쌓이게될것임..
맨 아래꺼는 control plane꺼임
performance log는 성능 로그이다.
서비스/cloudwatch/인사이트/container insights
프로메테우스를 올려서도 가능하지만
이렇게도 가능하다고 하심
container insight였다..
로그그룹은 삭제가 가능함 필요없으면 지우기바람
내일 Fargate할거기때문에 클러스터 미리 올려놓아야함
github.com