20220530 필기노트

강재민·2022년 5월 30일
0

필기노트

목록 보기
19/23
post-custom-banner

Chocolatey설치


K8s lens

https://k8slens.dev/
GUI를 제공해줌

윈도우에 kubectl 설치 및 인증서 복사

Prometheus 설치 및 실행

### 관리자권한으로 터미널 시작

choco install lens

### 이후 구글 계정으로 로그인

Pod에 shell이 있다면 터미널 접속도 가능


k9s cli

https://k9scli.io/

### 관리자 권한으로 터미널 실행

choco install k9s
k9s


이런식으로 cli모드임
이런걸 tui라고 하기도 함 (메뉴기반)


VScode


vscode에도 kubernetes를 설치할 수 있다.

.kubeconfg 적용

### 관리자 권한으로 터미널 실행

choco install kubernetes-helm

이런식으로 필수 구성 템플릿이 자동으로 나옴
다 완성하고 나면

이렇게 하면 create가 됨


minikube

간단하게 올려서 테스트해봐야하는 경우
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

EKS

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://eksctl.io/

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가 없어서 안보임


YAML 파일을 이용한 EKS 배포

** 강의자료 받아오기

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에도 연결할 수 있다

내부용이라 외부에서 접속할 수가 없다.

이렇게해야 퍼블릭이 가능


Ingress for ALB


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하고

이제 다시 다 지우고..


EBS for CSI

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

metrics-server

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/metrics-server.html


Cluster Autoscaler

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를 할 수 있음


CloudWatch Container insight

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-EKS-quickstart.html

log를 fluent bit이 받아서 cloutwatch에게 넘겨준다.

여기서 나온것이 쉘스크립트라서 변경을 해주어야한다.

https://git-scm.com/downloads


디폴트로 다 그냥 설치

서비스/cloudwatch/로그/로그그룹

로그가 만기없으면 계속 쌓이게될것임..
맨 아래꺼는 control plane꺼임

performance log는 성능 로그이다.

서비스/cloudwatch/인사이트/container insights


프로메테우스를 올려서도 가능하지만
이렇게도 가능하다고 하심
container insight였다..

로그그룹은 삭제가 가능함 필요없으면 지우기바람


내일 Fargate할거기때문에 클러스터 미리 올려놓아야함
github.com

post-custom-banner

0개의 댓글