brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jun 29. 2021

쿠버1탄-7. 쿠버네티스-실행 명령과 파라미터(선택)

다음은 쿠버네티스 스터디 자료를 참고해  정리한 내용입니다.


<1>  command 와 args 사용

<2>  env 전달

<3>  Volume 사용




<1>  command 와 args 사용


1

파드 생성 시 실행 명령(command = 도커의 Entrypoint)과 파라미터(arge = 도커의 Cmd)를 전달할 수 있습니다


ec2 접속

master node의 api 서버 접속

ssh -i ~/.ssh/id_rsa ubuntu@api.k8s.serverchk.com

kubectl delete pod --all


Pod 생성시  command와  args 사용이 가능하다.

사용해보고 내용을 이해 하자


2

cmd-args라는 pod하나 생성 , nginx 이미지로 생성

kubectl run cmd-args --image nginx


3

kubectl get pod -owide

NAME   READY   STATUS     RESTARTS   AGE   IP    NODE      NOMINATED NODE   READINESS GATES

cmd-args                        1/1     Running   0          32s   100.111.183.22   ip-172-20-46-12.ap-northeast-1.compute.internal  


4

cmd-args.yaml 생성


cat << EOF > cmd-args.yaml

apiVersion: v1

kind: Pod

metadata:

  name: cmd-args

spec:

  restartPolicy: OnFailure

  containers:

  - image: nginx

    name: cmd-args-nginx

    ports:

    - containerPort: 80

      protocol: TCP

    command: ["/bin/echo"]

    args: ["hello"]

EOF




5

kubectl apply -f cmd-args.yaml



6

topasvga@cloudshell:~ (ap-seoul-1)$ kubectl logs cmd-args

hello



7

kubectl delete pod --all


8

kubectl get pod -owide





<2>  env 전달


1

pod에 환경 변수 전달

env  사용


2

ubuntu@ip-172-20-41-255:~$ more env.yaml

apiVersion: v1

kind: Pod

metadata:

  name: mynginx

spec:

  containers:

  - image: nginx:latest

    name: mynginx

    ports:

    - containerPort: 80

    env:

    - name: MYPASSWORD

      value: QWE123




3

ubuntu@ip-172-20-41-255:~$ kubectl apply -f env.yaml

pod/mynginx created


4

ubuntu@ip-172-20-41-255:~$ kubectl exec mynginx -- env

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

HOSTNAME=mynginx

NGINX_VERSION=1.21.0

NJS_VERSION=0.5.3

PKG_RELEASE=1~buster

MYPASSWORD=QWE123

KUBERNETES_PORT=tcp://100.64.0.1:443

KUBERNETES_PORT_443_TCP=tcp://100.64.0.1:443

KUBERNETES_PORT_443_TCP_PROTO=tcp

KUBERNETES_PORT_443_TCP_PORT=443

KUBERNETES_PORT_443_TCP_ADDR=100.64.0.1

KUBERNETES_SERVICE_HOST=100.64.0.1

KUBERNETES_SERVICE_PORT=443

KUBERNETES_SERVICE_PORT_HTTPS=443

HOME=/root


5

topasvga@cloudshell:~ (ap-seoul-1)$ kubectl exec mynginx -- env | grep MYPASSWORD

MYPASSWORD=QWE123

보안은 되지 않는다~


6

kubectl delete pod --all


7

보안을 위해서 configmap과 secret라는 object를 사용한다.




<3>  Volume 사용


Pod 데이터 저장하기 위해 volume을 사용한다.

워커 노드로 테스트


1

워커 노드  /cndk 디렉토리 공유, Pod가 사용한다.



2

cat << EOF > hostpath.yaml


apiVersion: v1

kind: Pod

metadata:

  name: hostpath

spec:

  containers:

    - name: hostpath

      image: busybox

      args: [ "tail", "-f", "/dev/null" ]

      volumeMounts:

      - name: hostpath-volume

        mountPath: /etc/data

  volumes:

    - name: hostpath-volume

      hostPath:

        path: /cndk

EOF




3

생성 및 확인

kubectl apply -f hostpath.yaml && watch "kubectl describe pod hostpath | grep Events -A 12"


4

root@k8s-w1:~# ls /

bin   cndk 


5

pod에 파일 생성

[root@k8s-m ~ (kube:default)]# kubectl exec hostpath -- touch /etc/data/test.txt


6

woker node에 디렉토리 확인


ls /cndk

test.txt


7

파드 삭제

kubectl delete pod --all



다음과정

https://brunch.co.kr/@topasvga/1672



감사합니다.

        

매거진의 이전글 쿠버1탄-6. 쿠버네티스-라벨과 셀렉터를 알아보자.
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari