2023-10-10 13:36:33
728x90
728x90

Replicaset: 일정한 갯수의 POD를 유지하는 Contrller. Replicaset을 이용하면 POD의 숫자가 보장되기 때문에 관리자가 원하는 어플리케이션을 안정적으로 배포 할수 있다. 하지만, 시간이 흐르게 되면 해당 어플리케이션을 업그레이드하여 배포해야하는 경우가 생기게 되는데, Replicaset은 이런 업데이트에 관란 기능을 제공하지 않는다. 이를 해결하기 위해 사용하는 것이 Deployment 라는 오브젝트이다.

 

Deployment:

1. POD와 Replicaset 에 대한 선언과 업데이트를 제공하는 Controller

2. POD만으로 Service 운영시 복제 불가능

3. 안정적인 서비스를 위해서 복제 조절은 필수 조건

4. POD의 복제를 비롯한 다양한 부분의 제어 가

 

 

 

vi nginxrep.yml

apiVersion: apps/v1 kubectl api-resources로 replicaset version 확인
kind: ReplicaSet
metadata:
  name: rep-nginx
  labels: replicaset label 지정 
    env: rep-nginx
spec:
  replicas: 2 container의 복제본을 복사
  selector:
    matchLabels: container의 복제본의 label을 match
      env: app-nginx
  template: container의 복제본을 생성
    metadata:
      name: temp-nginx
      labels: 복제본의 labes 지정
        env: app-nginx
    spec:
      containers: container먼저 생성
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
kubectl apply -f nginxrep.yml
kubectl get rs,pods -o wide replicaset,pods 세부정보 확인
kubectl scale --replicas=3 rs/rep-nginx kubectl 명령어로 replicaset 개수 변경하기
kubectl diff -f nginxrep.yml
kubectl edit rs/rep-nginx edit 명령어로 replicaset의 설정 변경
----------------------------------------------------------------------------------------------------------
httpd를 실행하는 pod 생성, 단 복제본은 3개로 구성
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rep-http
  labels:
    env: rep-http
spec:
  replicas: 3
  selector:
    matchLabels:
      env: app-http
  template:
    metadata:
      name: temp-http
      labels:
        env: app-http
    spec:
      containers:
      - name: http
        image: httpd
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
확인 후 복제본의 갯수를 2개로 명령어로 조절
kubectl scale --replicas 2 rs/rep-http
실행중인 replicaset의 설정파일을 변경해서 6개로 증가
kubectl edit rs/rep-http
확인 후 명령어를 이용해서 3개로 축소
kubectl scale --replicas 3 rs/rep-http
----------------------------------------------------------------------------------------------------------
Deployment

vi nginxdep.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dep-nginx
  labels:
    env: dep-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata: 
      name: temp-nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: n1
        image: nginx:1.24
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
kubectl scale --replicas 6 deployment dep-nginx     scale 명령어로 deployment 개수 변경
kubectl expose deploy dep-nginx --type=NodePort     외부에 deployment 노출하기

vi httpdep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dep-http
  labels:
    env: dep-http
spec:
  replicas: 3
  selector:
    matchLabels:
      app: http
  template:
    metadata:
      name: temp-http
      labels:
        app: http
    spec:
      containers:
      - name: h1
        image: httpd
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
kubectl expose deploy dep-http --type=NodePort

 

명령어로 deployment 생성하기
kubectl create deployment [deployment 이름] --image=[image 이름] --replicas=3
--------------------------------------------------------------------------------------------------
1. master에 haproxy 설치
2. master에 mysql client 설치

동일 pod 내의 wordpress + mysql
wordpress pod,mysql pod 따로 구성후 haproxy 설정해야함
vi myword.yml wordpress만

apiVersion: v1
kind: Pod
metadata:
  name: word-sql
  labels:
    env: prod
spec:
  containers:
  - name: wordpress
    image: wordpress:5.6
    imagePullPolicy: IfNotPresent
    env:
    - name: WORDPRESS_DB_HOST
      value: word-sql:3306
    - name: WORDPRESS_DB_NAME
      value: wordpress
    - name: WORDPRESS_DB_USER
      value: root
    - name: WORDPRESS_DB_PASSWORD
      value: It12345!
    ports:
    - containerPort: 80
kubectl apply -f myword.yml
kubectl exec word-sql -it -- bash
cat wp-config.php | more

vi myword.yml에 mysql 추가
- name: mysql
    image: mysql:5.7
    imagePullPolicy: Never
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: It12345!
    - name: MYSQL_DATABASE
      value: wordpress
    - name: MYSQL_ROOT_HOST
      value: '%'
    ports:
    - containerPort: 3306
  nodeName: node3
kubectl delete pods word-sql
kubectl apply -f myword.yml
---------------------------------------------------------------------------------------------------
pod container에 파일 cp 하기

kubectl run app-nginx --image nginx --port 80 명령어로 nginx 실행하기
kubectl cp index.html app-nginx:/usr/share/nginx/html/index.html cp명령어로 index.html 파일 집어넣기
lynx로 확인하기

kubectl run app-http --image httpd --port 80 명령어로 http 실행하기
kubectl cp index.html app-http:/usr/local/apache2/htdocs/index.html cp명령어로 index.html 파일 집어넣기
lynx로 확인하기

728x90

'Kubernetes' 카테고리의 다른 글

Kubernetes Ingress, Autoscaling, Network  (0) 2023.10.23
kubernetes Service, ClusterIP, NodePort, LoadBalancer  (0) 2023.10.11
Kubernetes Scheduling, Labels  (0) 2023.10.05
Kubernetes pod, namespace  (0) 2023.10.05
Kubernetes 설치  (0) 2023.10.05