Kubernetes [ 쿠버네티스 ]

Kubernetes 커맨드 입력

looeon 2024. 3. 12. 13:14
쿠버네티스 / 도커 사용하여 파드의 아이피 주소를 출력

 

 

 

● apache_new.yml 생성하여 command 입력

---
apiVersion: v1
kind: Pod
metadata:
  name: apache-pod
  labels:
    app: myweb-svc
spec:
  containers:
  - name: myweb-svc
    image: httpd:2.4
    ports:
      - containerPort: 80
    command: ["tail","-n","1","/etc/hosts"]

 

 

 

● CrashoLoopBackOff 상태로 계속 지속된다

>> 아파치가 올라가는데 문제가 있어서 계속 다시 올리는 시도 중

 

 

 

 

● logs 에는 정상으로 올라오긴 한다

[vagrant@ms work]$ kubectl logs apache-pod
10.244.2.105    apache-pod

 

 

 

 

 

오류 실패 기록

 

① args 에서  [ ] 형식만 인식한다

>> 당연히 안되는거였다;; 

>> " > " 인식 안된다;;

---
apiVersion: v1
kind: Pod
metadata:
  name: apache-pod
  labels:
    app: myweb-svc
spec:
  containers:
  - name: myweb-svc
    image: httpd:2.4
    ports:
      - containerPort: 80
    args: ["cat","/etc/hosts",">","/usr/local/apache2/htdocs/index.html"]

 

 

 

 

② 안됨... docker file history로 봤을 때 CMD 가 이미 등록되어있다 >> 계속 덮어씌운다

>> command 가 도커의 CMD 와 유사

---
apiVersion: v1
kind: Pod
metadata:
  name: apache-pod
  labels:
    app: myweb-svc
spec:
  containers:
  - name: myweb-svc
    image: httpd:2.4
    ports:
      - containerPort: 80
    command: ["httpd","-DFORGROUND"]

 

# 밑에서 부터 읽는다

[vagrant@docker1 myweb]$ docker image history httpd:2.4
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
2776f4da9d55   7 weeks ago   CMD ["httpd-foreground"]                        0B        buildkit.dockerfile.v0
<missing>      7 weeks ago   EXPOSE map[80/tcp:{}]                           0B        buildkit.dockerfile.v0
<missing>      7 weeks ago   COPY httpd-foreground /usr/local/bin/ # buil…   138B      buildkit.dockerfile.v0
<missing>      7 weeks ago   STOPSIGNAL SIGWINCH                             0B        buildkit.dockerfile.v0
<missing>      7 weeks ago   RUN /bin/sh -c set -eux;   savedAptMark="$(a…   81.7MB    buildkit.dockerfile.v0
<missing>      7 weeks ago   ENV HTTPD_PATCHES=                              0B        buildkit.dockerfile.v0
<missing>      7 weeks ago   ENV HTTPD_SHA256=fa16d72a078210a54c47dd5bef2…   0B        buildkit.dockerfile.v0
<missing>      7 weeks ago   ENV HTTPD_VERSION=2.4.58                        0B        buildkit.dockerfile.v0
<missing>      7 weeks ago   RUN /bin/sh -c set -eux;  apt-get update;  a…   11MB      buildkit.dockerfile.v0
<missing>      7 weeks ago   WORKDIR /usr/local/apache2                      0B        buildkit.dockerfile.v0
<missing>      7 weeks ago   RUN /bin/sh -c mkdir -p "$HTTPD_PREFIX"  && …   0B        buildkit.dockerfile.v0
<missing>      7 weeks ago   ENV PATH=/usr/local/apache2/bin:/usr/local/s…   0B        buildkit.dockerfile.v0
<missing>      7 weeks ago   ENV HTTPD_PREFIX=/usr/local/apache2             0B        buildkit.dockerfile.v0
<missing>      7 weeks ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>      7 weeks ago   /bin/sh -c #(nop) ADD file:eb6a3def1f69e7665…   74.8MB

 

 

 

 

 

 

③  도커로 전환

 

● Dockerfile

FROM httpd
COPY ./entrypoint.sh .
RUN ./entrypoint.sh
CMD /usr/sbin/httpd -f /etc/apache2/httpd.conf -DFOREGROUND

 

● entrypoint.sh

# chmod 755

# tail -n 1 로 입력하니까 index.html 에 내용 전부가 제대로 들어가질 않는다 [ 일부만 들어간다 ]

cat /etc/hosts > /usr/local/apache2/htdocs/index.html

 

>>> 컨테이너가 올라가질 못한다

 

 

 

작동

 

 

① kubectl 로 실행하는 방법 ( feat. 괌 )

● | 로 / bin / sh - c [ 커맨드 실행 ] 로 args 로 내린다

● apache2 를 다시 다운로드해서 실행하는 이유는 command 를 사용하면 image 를 못 읽어낸다

---
apiVersion: v1
kind: Pod
metadata:
  name: guam-pod
  labels:
    app: guam-svc
spec:
  containers:
  - name: guam-svc
    image: httpd:2.4
    ports:
      - containerPort: 80
    command: ["/bin/sh","-c"]
    args:
    - |
      apt-get update
      apt-get install net-tools
      apt-get install apache2 -y
      service apache2 restart
      cat /etc/hosts > /var/www/html/index.html
      service apache2 restart
      sleep 3600s

 

 

직접 exec -it -- /bin/bash 로 직접 접속해서 찾아볼 필요 없이 - c 옵션을 넣어서 한번에 볼 수 있다

 kubectl exec -it guam-pod -- /bin/bash -c "service apache2 status"
apache2 is running.

 

 

 

 

▩ 안된다;;;;;

더보기

 

 

 

 

 

② Docker 사용하여 실행

 

● 명령어 실행을 위한 경로 확인

[vagrant@docker1 myweb]$ docker run --rm -it httpd /bin/bash
root@9263fc74b568:/usr/local/apache2# whereis httpd
httpd: /usr/local/apache2/bin/httpd

 

 

 

 

● Dockerfile

FROM httpd
COPY ./entrypoint.sh .
CMD ./entrypoint.sh

 

 

 

 

● entrypoint.sh 수정

cat /etc/hosts > /usr/local/apache2/htdocs/index.html
/usr/local/apache2/bin/httpd -D FOREGROUND

 

 

 

 

● docker image 올리기

 docker tag httpd looeon/mya
docker push looeon/mya

 

 

 

 

 

● 쿠버네티스 장비에서 mya image 를 위한 yaml 파일 생성

---
apiVersion: v1
kind: Pod
metadata:
  name: apache-pod
  labels:
    app: myweb-svc
spec:
  containers:
  - name: myweb-svc
    image: looeon/mya
    ports:
      - containerPort: 80

 

 

 

● 윈도우 접속을 위한 서비스 파일 ( mya-svc.yaml )

---
apiVersion: v1
kind: Service
metadata:
  name: apache-service
spec:
  ports:
  - name: myweb-svc
    port: 9900
    targetPort: 80
  selector:
    app: myweb-svc
  type: NodePort
[vagrant@ms work]$ kubectl get svc
NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
apache-service   NodePort   10.96.194.217   <none>        9900:32031/TCP   2m31s

 

 

# 다음번에는 tail -n 1 써먹자