Kubenetes 리소스 관리
kubectl 소개
kubectl run --image=nginx <name> <port> <env> kubectl run --image=nginx nginx-test --port=80 --env="DOMAIN=cluster" |
- deployment가 create 되면서 배포를 한다.
- deployment는 pod controller의 역활로 replica 관리 등을 한다.
- 현재 default 1개로 하나의 pod만 배포한다.
kubectl get deploy |
- describe를 통해 deployment를 확인
kubectl describe deploy nginx-test |
- deploy에 묶여 있는 pod는 삭제되면 다시 생긴다. replica에 따라 지속적으로 pod를 관리한다.
- run으로 실행 한것은 자동으로 run=이름 바벨이 생긴다.
- pod 확인
kubectl get po |
- kube get po -o wide
- kube describe po <name>
- kubectl exec <pod> ...
- kubectl logs
- kubectl delete
. po를 지워도 지워지지 않느다.
- delpoy를 지워야 한다.
- 간단한 pod는 cli 로 할 수있지만 복잡한 구성은 yaml 파일로 작성해서 해야 한다.
kubectl create -f multi-deployment.yml |
- 삭제
- 단일 pod 구성
apiVersion: v1 kind: Pod metadata: name: multi labels: app: wordpress spec: containers: - name: wordpress image: wordpress ports: - containerPort: 80 - containerPort: 443 env: - name: WORDPRESS_DB_HOST value: 127.0.0.1 - name: WORDPRESS_DB_USER value: wordpress - name: WORDPRESS_DB_PASSWORD value: password - name: db image: mysql env: - name: MYSQL_ROOT_PASSWORD value: password - name: MYSQL_DATABASE value: wordpress - name: MYSQL_USER value: wordpress - name: MYSQL_PASSWORD value: password |
- container는 pod와 같은 ip를 가지고 있다.
- secrets
. 64bits 인코딩 스트링으로 사용한다.
. 1M 이하 사용 가능
. volume 처럼, 환경 변수 처럼 사용 가능하다.
apiVersion: v1 kind: Secret metadata: name: mysql-passwords type: Opaque data: root: cm9vdC1wYXNzd29yZA== wordpress: d29yZHByZXNzLXBhc3N3b3Jk |
- describe로 봐도 안보인다.
1. 환경변수 처럼 사용하기
piVersion: v1 kind: Pod metadata: name: multi-secrets labels: app: wordpress spec: containers: - name: wordpress image: wordpress ports: - containerPort: 80 - containerPort: 443 env: - name: WORDPRESS_DB_HOST value: 127.0.0.1 - name: WORDPRESS_DB_USER value: wordpress - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql-passwords key: wordpress - name: db image: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-passwords key: root - name: MYSQL_DATABASE value: wordpress - name: MYSQL_USER value: wordpress - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: mysql-passwords key: wordpress |
2. volume 매핑해서 사용하기
- 해당 폴더에 파일로 올라온다.
apiVersion: v1 kind: Pod metadata: name: nginx-secrets spec: containers: - name: nginx image: nginx volumeMounts: - name: secrets mountPath: "/etc/secrets" readOnly: true volumes: - name: secrets secret: secretName: mysql-passwords
|
* Service
- selector와 label 정보로 맵핑한다.
|
- 3가지 다른 유형의 서비스가 있다.
1. Cluster IP: 내부 통신만 가능
2. NodePort: host를 통해서 나갈 수 있다. (모든 host가 80이 되어 문제가 된다.)
3. LoadBalancer: LB를 두어 분산 서비스를 할 수 있다.
- 서비스이름.namespace.svc.cluster.local
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: wp spec: replicas: 1 template: metadata: labels: app: wordpress spec: containers: - name: wordpress image: wordpress ports: - containerPort: 80 - containerPort: 443 ~ ~
|
root@host03-01:~/k8stest# vi wp-service.yml apiVersion: v1 kind: Service metadata: name: wp-service labels: app: wordpress spec: type: LoadBalancer ports: - port: 80 name: http - port: 443 name: https selector: app: wordpress |
* Volume
* Namespace
- kubectl get ns
apiVersion: v1 kind: Namespace metadata: name: production
|
- namespace에 대한 context를 만들어서 해당 namespace에 대해 po 등을 볼 수 있다.
kubectl config set-context production --namespace=production kubectl config use-context production |
- namespace 삭제시 안에 있는 서비스 모두 지워진다. 주의하자.
* Deployment
- pod의 set으로 여러개의 replica를 관리한다.
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: multi-deploy spec: replicas: 2 template: metadata: labels: app: web-deploy spec: containers: - name: nginx image: nginx - name: mysql image: mysql env: - name: MYSQL_ROOT_PASSWORD value: password
|
- 확장
kubectl scale --replicas=3 deployment/multi-deploy |
- update
kubectl set image deploy/multi-deploy nginx=nginx:1.11.4 |
- update에 대한 rollup 을 볼 수 있다.
kubectl rollout history deployment/multi-deploy |
- rollback이 가능하다.
* DaemonSets
- swarm의 global 옵션과 같은 것으로 모든 node에 한 pod씩 배포된다.
- mgt나 agent등에 활용.
'디지털 양피지 > Docker' 카테고리의 다른 글
8. Open Shift (0) | 2017.07.04 |
---|---|
7.Kubernetes - Advanced (0) | 2017.07.03 |
6. Kubernetes 설치 (0) | 2017.06.30 |
6. Kubernetes (0) | 2017.06.30 |
5. Docker Swarm (0) | 2017.06.29 |