새소식

인기 검색어

Kubernetes

7/8 레플리카셋, 수평 스케일링, 디플로이먼트 등 실습

  • -

<Workload>
pods

<Workload-Controller>
replicationcontrollers
daemonsets
deployments
replicasets
statefulsets
horizontalpodautoscalers
cronjobs
jobs

<Network>
services
endpoints
ingresses

<Storage>
persistentvolumeclaims
persistentvolumes
storageclasses

secrets
configmaps

<RBAC>
clusterrolebindings
clusterroles
rolebindings
roles
serviceaccounts
certificatesigningrequests

 


리소스 타입을 하나만 지정하면 하나만 나옴. 여러개 지정할땐 콤마 붙여서 하기

 

리소스타입의 약자만 쳐도 나옴

 

포트80 은 마이앱(프론트앤드), 타겟포트8080은 컨테이너(백엔드)

 

마이앱 서비스의 포트 뒤에써줌

새 터미널에 가서 컬 해서 외부에서 접속해도 접속가능

 

 

파드 삭제해도 아래에서 파드 자꾸 생김

복제본을 3개로 구성하라고 선언해줬기 때문에 그 수에 무조건 맞춰서 저절로 생성됨

파드는 디플로이먼트가 관리. 아무리 지워도 디플로이먼트에 지정된대로 수행하게됨

 

결국 디플로이먼트를 지워야지 파드가 삭제됨

 

 


vagrant@k-node3:~$ exit
logout
Connection to 127.0.0.1 closed.
(base) student@cccr:~/vagrant/k8s$ vagrant destroy k-node3
    k-node3: Are you sure you want to destroy the 'k-node3' VM? [y/N] y
==> k-node3: Forcing shutdown of VM...
==> k-node3: Destroying VM and associated drives...
(base) student@cccr:~/vagrant/k8s$ vagrant up

-> 노드3 다운그레이드하는데 계속 에러떠서 디스트로이하고 다시시작...

 


vi myapp-pod-label.yaml ->레이블을 사용한 파드 정의 해줌

cat myapp-pod-label.yaml  
kubectl create -f myapp-pod-label.yaml   -> 파드생성
kubectl get pods --show-labels   -> 파드 레이블 확인
kubectl get pods -L env,tier
kubectl get pods myapp-pod-label -o yaml
kubectl label pods myapp-pod env=dev
kubectl label pods myapp-pod-label env=debug
kubectl label pods myapp-pod-label env=debug  --overwrite
kubectl get pods -L env,tier

 


일치성/집합성 기준 레이블 셀렉터 꼭 기억해두기

 

*어노테이션

검색용으로 사용할 순 없음. 단순 정보 붙여놓기 기능.

kubectl annotate pods myapp-pod devops-team/developer="shm" 
kubectl describe pod myapp-pod
kubectl get pod myapp-pod -o yaml

 


*네임스페이스

 

kubectl get ns
kubectl get pods -n kube-system
kubectl get all -n kube-system
kubectl get pods -A
kubectl create namespace development
kubectl get ns
vi qa-ns.yaml

kubectl create -f qa-ns.yaml
kubectl get ns
kubectl create -f myapp-pod.yaml -n development
kubectl get pods -n development

 

*리소스 삭제

kubectl delete pod myapp-pod인 -> 오브젝트이름으로 파드 삭제

kubectl delete -f myapp-pod-ns.yaml -> yaml 파일로 파드 삭제

kubectl  delete pods -l tier=frontend -> 오브젝트 레이블을 이용한 오브젝트 삭제

kubectl delete namespace development ->디벨롭먼트 네임스페이스 삭제

kubectl delete -f qa-ns.yaml -> 정의된 yaml 을 이용하여 삭제

kubectl get ns -> 삭제된 네임스페이스 확인

 

디벨롭먼트 옵션에 있는 파드를 삭제


코딩 타자연습^^

 

https://www.speedcoder.net

 

Typing Practice for Programmers | SpeedCoder

 

www.speedcoder.net

 


p.54~p.66

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod-liveness
spec:
  containers:
  - image: ghcr.io/c1t1d0s7/go-myweb
    name: myapp
    ports:
    - containerPort: 8080
      protocol: TCP
    livenessProbe:
      httpGet:
        path: /health
        port: 8080

 

 

kubectl get pod myapp-pod -o jsonpath='{.status.containerStatuses[*].state}'

kubectl create -f myapp-pod-liveness.yaml

kubectl get pods -watch

 

 

 

 

 

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod-liveness-404
spec:
  containers:
  - image: ghcr.io/c1t1d0s7/go-myweb
    name: myapp
    ports:
    - containerPort: 8080
      protocol: TCP
    livenessProbe:
      httpGet:
        path: /health?code=404
        port: 8080

kubectl create -f myapp-pod-liveness-404.yaml

kubectl describe pod myapp-pod-liveness-404

 

 


apiVersion: v1
kind: ReplicationController
metadata:
  name: myapp-rc
spec:
  replicas: 3
  selector:
    app: myapp-rc
  template:
    metadata:
      labels:
        app: myapp-rc
    spec:
      containers:
      - name: myapp
        image: ghcr.io/c1t1d0s7/go-myweb
        ports:
        - containerPort: 8080




kubectl create  -f myapp-rc.yaml  -> 레플리케이션 컨트롤러 생성
kubectl get replicationcontrollers    -> 레플리케이션 컨트롤러의 목록 및 상태 확인
kubectl get pods      -> 피드목록 확인
kubectl get pods --show-labels   -> 피드에 구성된 레이블 같이보기
kubectl describe replicationcontrollers myapp-rc    -> 레플리케이션 컨트롤러의 자세한 정보 확인

kubectl delete pod myapp-rc-<POD NAME>     -> 노드의 장애 발생을 가정하고 파드 삭제
kubectl get node    
-> 레플리케이션 컨트롤러는 레이블 셀렉터에 의해 관리되는 파드를 확인, 하나의 파드가
삭제된 걸 확인 후 파드의 복제본 수와 맞추기 위해 하나의 파드를 새로 생성
kubectl describe replicationcontrollers myapp-rc    -> 어떤 파드가 새로 생성되었는지 확인

*레플리케이션 컨트롤러와 레이블

kubectl get pods --show-labels
kubectl label pod myapp-rc-sfdwb env=dev
kubectl get pods --show-labels
kubectl label pod myapp-rc-sfdwb app=test --overwrite
kubectl get pods --show-labels
kubectl label pod myapp-rc-sfdwb app=myapp-rc --overwrite
kubectl get pods --show-labels

 


*파드의 수평 스케일링

kubectl scale replicationcontroller myapp-rc --replicas=4
kubectl get replicascontrollers
kubectl get replicationscontrollers
kubectl get replicationcontrollers
kubectl get pods

kubectl edit replicationcontrollers myapp-rc
kubectl get replicationcontrollers
kubectl get pods --show-labels
kubectl replace -f myapp-rc.yaml
kubectl get replicationcontrollers
kubectl get pods 

 

 

 


*레플리카셋

exist -> 키를 매칭 시키는것

DoesNotExist -> 키매칭 x

 

* 레플리카셋 생성

레플리케이션 컨트롤러에서 생성한 myapp-rc.yml 파일과 똑같은 기능을 하는 레플리카셋을 생성

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: myapp-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp-rs
  template:
    metadata:
      labels:
        app: myapp-rs
    spec:
      containers:
      - name: myapp
        image: ghcr.io/c1t1d0s7/go-myweb
        ports:
        - containerPort: 8080

 

 

kubectl create -f myapp-rs.yaml

kubectl get replicasets.apps

kubectl get pods

 

 

*matchExpressions를 사용한 레플리카셋 생성
vi myapp-rs-exp.yaml


apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: myapp-rs-exp
spec:
  replicas: 3
  selector:
    matchExpressions:
      - key: app
        operator: In
        values:
          - myapp-rs-exp
      - key: env
        operator: Exists
  template:
    metadata:
      labels:
        app: myapp-rs-exp
        env: dev
    spec:
      containers:
      - name: myapp
        image: ghcr.io/c1t1d0s7/go-myweb
        ports:
        - containerPort: 8080

 

 

*레플리카셋 확인

kubectl get replicasets,apps -o wide

kubectl get pods --show-labels

 

kubectl delete replicasets.apps myapp-rs

 

 

*DoesNotExist : 레이블의 키값이 매칭되냐 안되냐 여부

(키가 포함되지 않으면서 키값만 매칭해야함. 밸류는 설정하지 않는다.)

 

 


https://nearhome.tistory.com/

 

집주변이 최고야

팀원 모두가 알고있는 하나의 공유된 좌표

nearhome.tistory.com

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.