공부공부 공부공부내용
[3.1] 쿠버네티스 POD 본문
sudo apt-get install -y curl
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
## copy kube config file #exit#
scp -r devops@192.168.122.11:~/.kube .
pod :
- 쿠버네티스 작업의 단위.
- 파드에는 하나의 컨테이너만 가질 수도 있고 하나이상의 여러개의 컨테이너가 존재할 수도 있다. 그 컨테이너들은 각각 다른 동작을 해야한다.
- 메인기능을 가진 컨테이너가 있고 서브 기능을 가진 컨테이너가 존재할 수 있다.
- 파드에만 IP가 할당되고 각각의 컨테이너들에게는 IP없음.
- 하나의 파드안에 있는 다중의 컨테이너는 volume을 공유할 수 있다.
- 워드프레스 디비가 있다면 이 두개가 각각 pod로 분리되는 것.
- 쿠버네티스 클러스터 내부의 파드는 주로 두 가지 방법으로 사용된다.
- 단일 컨테이너만 동작하는 파드
- 함께 동작하는 작업이 필요한 다중 컨테이너가 동작하는 파드
- 파드에 하나이상의 컨테이너가 있다고 하더라도 파드의 컨테이너는 같은 노드에서만 동작하고 , 하나의 파드에 있는 다중 컨테이너는 저장소, 네트워크 IP 등을 공유한다.
*클러스터: 여러개의 물리적 서버가 하나의 서버처럼 동작되는 것.
여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합
실습환경은 우분투 환경이 클라이언트, 가상머신이 서버환경
- 파드 리소스의 주요 필드
.spec.containers: 컨테이너 정의
.spec.containers.image: 컨테이너에 사용할 이미지
.spec.containers.name: 컨테이너 이름
.spec.containers.ports: 노출할 포트 정의
.spec.containers.ports.containerPort: 노출할 컨테이너 포트번호
.spec.containers.ports.protocol: 노출할 컨테이너 포트의 프로토콜(기본:TCP)
- 파드 생성
$ kubectl create -f mynapp-pod.yml
- 파드 목록확인
$ kubectl get pods
- 실행 중인 파드 정의 확인
$ kubectl get pods mynapp-pod -o yaml #yaml 형태로 출력가능 $ kubectl get pods mynapp-pod -o json #json 도 가능
- pod의 정보를 자세히 보는 방법
**$ kubectl describe pods mynapp-pod # 파드생성후 running떠야 정상. pending 뜨면 이 describe로 Events 항목 봐보기.**
- pod의 로그 확인
**$ kubectl logs mynapp-pod**
- 파드를 생성할 수 있는 YAML 파일 작성해보기
apiVersion: v1
kind: Pod
metadata:
name: mynapp-pod
spec:
containers:
- image: c1t1d0s7/myweb
name: mynapp
ports:
- containerPort: 8080
protocol: TCP
student@student:~/k8s$ kubectl create -f pod.yaml
kubectl get pods mynapp-pod -o yaml
- 실습과정
$ source <(kubectl completion zsh) # z쉘 쓰면 이렇게 추가 (자동완성기능)
$ source ~/.zshrc
$ kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl
$ source ~/.bashrc
bash쉘 사용할 때 자동완성 기능 추가하려고 하면 이 커맨드.
apiVersion: v1
kind: Pod
metadata:
name: mynapp-pod
spec:
containers:
- image: c1t1d0s7/myweb
name: mynapp
ports:
- containerPort: 8080
protocol: TCP
- image: httpd:latest
name: apache
ports:
- containerPort: 80
protocol: TCP
네트워크와 볼륨에 대한 제어권은 없어서 컨테이너만 생성한다고 생각하기.
가상호스트 세가지 (이름기반, IP기반, 포트기반)
student@student:~$ kubectl describe pod mynapp-pod
Name: mynapp-pod
Namespace: default
Priority: 0
Node: node3/192.168.122.23
Start Time: Wed, 22 Jul 2020 10:18:44 +0900
Labels: <none>
Annotations: <none>
Status: Running
IP: 10.233.92.11 # 내부네트워크 대역. 이 주소로 현재는 통신 불가. 같은네트워크 대역인 파드를 하나 띄워서 통신 가능하지만 나중에 배울 서비스하나만 동작하면 통신이 더 쉽게 가능해짐.
IPs:
IP: 10.233.92.11
Containers:
mynapp:
Container ID: docker://10f1159279a12d46bcaca2237afbdc790eef5200090a4f3c98f8158cb88bba31
Image: c1t1d0s7/myweb
Image ID: docker-pullable://c1t1d0s7/myweb@sha256:5958dd35380b332e178662a185179c8230ac9008cf6788400d89525a7d2478a4
Port: 8080/TCP
Host Port: 0/TCP
State: Running
Started: Wed, 22 Jul 2020 10:18:49 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-hnrh5 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-hnrh5:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-hnrh5
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/mynapp-pod to node3
Normal Pulling 41m kubelet, node3 Pulling image "c1t1d0s7/myweb"
Normal Pulled 41m kubelet, node3 Successfully pulled image "c1t1d0s7/myweb"
Normal Created 41m kubelet, node3 Created container mynapp
Normal Started 41m kubelet, node3 Started container mynapp
$ kubectl run -it os --rm --image=centos
os란 파드 생성. —rm?
통신이 되기 위해 띄운 파드이다.
아직 외부네트워크와 통신하는 법을 모르기 때문에 일단 이방법!
만든 os 지우는법?? exit?? 뭐하라고하셧는데
생각
왜 파드에 여러개의 컨테이너를 생성하는가?
각각 계층별로 정의하는 것들 자세히 확인할 수 있음. 아래
required영역은 필수로 참조.
pod를 정의하는 세가지 → 이름,이미지, 포트
$ kubectl explain pod
$ kubectl explain pod.spec
$ kubectl explain pod.spec.containers
#에서 필요한 섹션들 복사해서 vscode로 가져와 수정하기.
apiVersion: v1
kind: Pod
metadata:
name: mynapp-pod # 오브젝트 이름을 여기에 정의
spec:
containers:
- image: c1t1d0s7/myweb
name: mynapp
ports:
- containerPort: 8080
protocol:TCP
'클라우드 구성 및 관리 > [쿠버네티스]' 카테고리의 다른 글
[3.2] 쿠버-레이블 및 셀렉터 & 어노테이션(주석)dev (0) | 2021.03.22 |
---|---|
쿠버네티스 실습 2 (0) | 2020.07.30 |
라이브니스프로브 (조대협님 블로그 퍼옴) (0) | 2020.07.28 |
0727 실습 (ingress+svc2개+ 애플리케이션 사용자화 활용한 실습) (0) | 2020.07.27 |
[1] 쿠버네티스 시작 0721 (0) | 2020.07.26 |