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 -> 삭제된 네임스페이스 확인
코딩 타자연습^^
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 : 레이블의 키값이 매칭되냐 안되냐 여부
(키가 포함되지 않으면서 키값만 매칭해야함. 밸류는 설정하지 않는다.)
집주변이 최고야
팀원 모두가 알고있는 하나의 공유된 좌표
nearhome.tistory.com
'Kubernetes' 카테고리의 다른 글
7/13 Storage (0) | 2021.07.13 |
---|---|
kube 설치 및 노드 업그레이드 (0) | 2021.07.12 |
7/9 데몬셋, 잡 컨트롤러, metal lb 등 실습 (0) | 2021.07.09 |
7/7 kubeadm, kubelet, kubectl (0) | 2021.07.07 |
7/6 Kubernetes 설치 및 Cluster 만들기 실습 (0) | 2021.07.06 |
소중한 공감 감사합니다