Kubernetes 2일차

권수한·2023년 6월 22일
0

docker & kubernetes

목록 보기
1/1

새로운 node 생성

토큰이 만료되었을 경우 노드를 생성하기 위해 마스터 서버에서 아래의 명령으로 토큰을 확인해줍니다.

kubeadm token create: 토큰 생성

다음엔 인증서도 생성해서 확인 후, 새롭게 노드로 생성할 서버에서 명령어를 입력합니다.

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //': 인증서 생성

노드로 만드려는 서버에서 아래의 명령어를 입력하면 노드가 추가 됩니다.
kubeadm join 10.0.0.1:6443 --token c6bgie.t3rh7btbturegnlw --discovery-token-ca-cert-hash sha256:ffc454396247912f69ebca122451d34742d6ede07ba203253aca6fba12ea9e8b


node 지정

저번 시간에 yaml 파일을 사용하여 pod를 생성했었는데, pod 생성 시 랜덤으로 node에 들어갔었습니다.

그래서 이번에는 node를 지정해서 넣을 수 있는 명령어를 알아보겠습니다.

---
apiVersion: v1
kind: Pod
metadata:
        name: apache
        labels:
                app: web1
spec:
        nodeName: node2 => nodename을 지정해주면 원하는 노드에서 pod가 만들어진다.
        containers:
                - name: apache
                  image: httpd
                  ports:
                        - containerPort: 80

imagePull Limit 문제

pod를 생성하던 도중 이미지 pull 제한 문제가 생겨, secret을 생성하고 진행하려 해도 해결이 되지 않아서

docker에서 다운 받은 이미지를 묶어서 이미지를 사용하려는 서버에 아래와 같이 명령어를 입력했습니다.

docker save -o [example.tar] [tar로 묶을 이미지명]: 이미지를 tar파일로 묶어 준다.
	ex) docker save -o word.tar wordpress:5.6 httpd:latest alpine:latest nginx:latest nginx:1.23 nginx:1.14 centos:7 mysql:5.7
    
scp [파일명] [보낼 서버의 계정]@[보낼 서버의 IP]:[경로] 
	ex)scp word.tar root@10.0.0.1:/root
    
- image를 받은서버
ctr [global options] command [command options] 
	ex) ctr --namespace k8s.io image import word.tar: k8s.io 네임스페이스에 word.tar로 묶인 이미지들을 적용한다.
crictl [global options] comman [command options]
	ex) crictl -r unix:///run/containerd/containerd.sock image ls: 받은 이미지 확인  

이 과정을 다 한 후에, docker hub에서 이미지를 받지 않도록 yaml 파일에 옵션을 하나 추가해주었습니다.

imagePullPolicy: Never

ex)
---
apiVersion: v1
kind: Pod
metadata:
        name: wp
        labels:
                run: myword
spec:
        containers:
                - name: wp
                  image: wordpress:5.6
                  imagePullPolicy: Never
                  env:
                        - name: WORDPRESS_DB_HOST
                          value: 10.42.0.2
                        - name: WORDPRESS_DB_NAME
                          value: wordpress
                        - name: WORDPRESS_DB_USER
                          value: root
                        - name: WORDPRESS_DB_PASSWORD
                          value: It12345!
                  ports:
                        - containerPort: 80

OS 계열 지속 명령어

alpine, centos와 같은 이미지로 컨테이너를 생성할 때는 꼭 컨테이너가 계속 실행되도록 명령어를 넣어주어야 한다.

명령어로 alpine, centos와 같은 이미지로 파드를 실행 할 때는,

kubectl run c7 --image centos:7 -it --bash

yml 파일로 alpine, centos 이미지로 파드를 만들어서 실행 할 때는, command를 넣어준다.

---
apiVersion: v1
kind: Pod
metadata:
        name: apache
        labels:
                app: web1
spec:
        nodeName: node2
        containers:
                - name: apache
                  image: httpd
                  ports:
                        - containerPort: 80
                  imagePullPolicy: IfNotPresent
                - name: alpine
        name: apache
        labels:
                app: web1
spec:
        nodeName: node2
        containers:
                - name: apache
                  image: httpd
                  ports:
                        - containerPort: 80
                  imagePullPolicy: IfNotPresent
                - name: alpine
                  image: alpine
                 * command: [ "/bin/sh", "-c", "while true; do sleep 1000; done" ] *
                  imagePullPolicy: IfNotPresent

arg가 cmd보다 우선시 된다.


1. 연습문제

  • wordpress pod, mysql pod를 각 각 생성하고 서로 연결을 하기
  1. 우선 mysql 파드를 먼저 생성하여 IP를 확인한다.
vi ms.yml
---
apiVersion: v1
kind: Pod
metadata:
        name: ms
        labels:
                db: sql
spec:
        containers:
                - 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

2. mysql pod의 ip 확인
kubectl get po -o wide


3. wordpress 파드 생성 시, DB_HOST에 mysql 파드의 ip를 입력한다.

vi wp.yml
---
apiVersion: v1
kind: Pod
metadata:
        name: wp
        labels:
                run: myword
spec:
        containers:
                - name: wp
                  image: wordpress:5.6
                  imagePullPolicy: Never
                  env:
                        - name: WORDPRESS_DB_HOST
                          value: 10.42.0.2 <= 여기에 mysql pod의 IP 입력
                        - name: WORDPRESS_DB_NAME
                          value: wordpress
                        - name: WORDPRESS_DB_USER
                          value: root
                        - name: WORDPRESS_DB_PASSWORD
                          value: It12345!
                  ports:
                        - containerPort: 80

4. wordpress를 포트포워딩 해준다.
kubectl expose po wp --type=NodePort

5. 포트포워딩 해준 포트 확인
kubectl get services

  1. 확인

0개의 댓글