티스토리 뷰

2일차 복습

 

Build Once, Deploy Anywhere

한 번 빌드하면 아무나 붙어서 쓸 수 있는 배포

 

컨테이너는 이미지 표준 규격이 하나라서 다같이 사용할 수 있어 이식성이 높음.

 

VM은 각각 다 확장자가 달라서 이식성이 떨어짐.

 

수동 생성은 레이어 하나가 더생기므로 추천하지 않음. (간단한 테스트 때나 사용)

 

운영 환경에서 사용하는 이미지는 자동 생성 이미지로 스크립트 기반으로 이미지를 만듬.

 

Instruction

- ADD, COPY, RUN -> Layer 생성

 

docker run IMAGE명 CMD

이렇게 CMD 를 이미지명 뒤에 붙이면 이미지에 있는 CMD가 아닌 CMD 뒤에 내가 원하는 펑션들로 적용할 수 있음.

 

레지스트리(registry server)

이미지를 저장하고 있는 저장소.

hub.docker.com, quay.io(CoreOS 인수한 redhat에서 제공) 등

quay.io가 무료로 제공하는 기능이 더 많음.

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

강사님이 제공해주신 OV 파일 다운 받고 VB에서 가상 시스템 가져오기

모든 네트워크 어댑터의 새 MAC 주소 생성

(희박하지만 기존 만들었던 가상 머신이랑 MAC 주소 충돌날 수 있음.)

controlplane 172.16.0.201

node01 172.16.0.201 -> 172.16.0.202로 변경 (실수로 위에와 동일한 ip로 설정해둠)

nmcli con mod enp0s8 ipv4.address 172.16.0.202/24

위 명령어로 바꿈.

바꾸고 reboot 명령어로 리부트 진행.

켜지면 IP 변경 됐는지 확인.

이후 컨트롤 플레인도 실행시킴.

3개 모두 실행하고 각 IP로 핑날려서 정상 작동하는지 확인한다.

hostnamectl set-hostname registry                      172.16.0.200

hostnamectl set-hostname controlplane              172.16.0.201

hostnamectl set-hostname node01                      172.16.0.202

위 명령어로 호스트네임 작성.

 

vi /etc/hosts

172.16.0.200 myregistry.com

172.16.0.201 controlplane

172.16.0.202 node01

각 서버 들어가서 vi 모드로 추가 해줌

MultiExec로 세션 동시 명령 가능.

 

Installation
kubernetes 는 가상 시스템 (VM) 호스트 혹은 물리적 호스트에 설치 할 수 있습니다. 미리 설치할 호스트에 다음의 내용을 준비해 주시기 바랍니다.
준비사항
호환 가능한 Debian , Redhat등의 Linux 호스트 3대 (master, node1, node2)
2 GB 이상의 RAM 메모리
2 Core 이상의 CPU
모든 호스트들의 네트워크 연결
고유 호스트명 , MAC 주소 그리고 product_uuid
Swap 영역 비활성화

 

실제 강의는 노트북 사양때문에 Node2는 뺌.

 

systemctl disable firewalld ; systemctl stop firewalld

 

방화벽 내림

 

201, 202 두개 멀티 실행

각 노드에서 docker 및 kubernetes 패키지를 설치합니다. 또한 swap을 비활성화 시키고 재부팅시 활성화 되지 않도록
/etc/fstab 파일을 수정합니다. 마지막으로 br_netfilter 커널 모듈을 활성화 합니다.

 

modprobe br_netfilter
modprobe overlay
# lsmod | grep br_netfilter
cat <<EOF > /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
setenforce 0
sed -i s/SELINUX=enforcing/SELINUX=permissive/ /etc/selinux/config
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

 

yum remove docker \

docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
yum install wget -y
wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# curl -fsSL https://download.docker.com/linux/centos/docker-ce.repo \
# -o /etc/yum.repos.d/docker-ce.repo
yum install -y containerd.io
containerd config default > /etc/containerd/config.toml
systemctl start containerd && systemctl enable containerd
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sed -i \
's,config_path = \"\",config_path = \"/etc/containerd/certs.d\",g' \
/etc/containerd/config.toml
systemctl restart containerd
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet

 

위 명령어중 yum install -y kubelet kubeadm kubectl ~ 이 설치의 핵심임.

Initialize Control Plane by kubeadm
kubernetes의 가장 핵심 구성요소인 control plane을 kubeadm init 명령어로 자동 구성합니다.

 

# master node에서만 실행합니다.
kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=172.16.0.201

 

cpu 2core 이상 메모리 2GB가 되어야 실행됨. (최소사양)

 

그래서 Control Plane 설정 변경

마지막줄을 node1에서 실행하기.

 

kubeadm join 172.16.0.201:6443 --token ddrvat.o9gx5etpfdfbzyee \
        --discovery-token-ca-cert-hash sha256:ab5b3878c5b834372ad0f32f7e60dcbb5c07fb0df07c0aebbe6521a0e681               f5b3

 

Install kubectl to remote host
registry host에서 kubectl 명령어를 사용할 수 있도록 client 를 설치 합니다.

 

# On Remote Host myregistry 에서만 실행합니다.

mkdir ~/.kube

scp controlplane:/etc/kubernetes/admin.conf ~/.kube/config

 

curl -LO https://dl.k8s.io/release/\

$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl

 

chmod +x kubectl
mv kubectl /usr/local/bin/


kubectl get nodes

 

admin.conf 파일이 자격증명을 가지고 있음. scp로 레지스트리 서버로 복사해오는 거임.

 

config 파일(자격증명)이 없으면 kubectl get node 명령어 쳐보면 에러남.

 

현업에서 사용하는 구성이 위와 같음.

 

자격증명을 가져와서 remote host에서 작업 및 관리함.

 

위의 클러스터 세팅이 끝나면 controlplane에는 접근할 필요가 없음.

 

ssh root@172.16.0.201를 통해 controlplane 서버 한번 접근하고 위의 명령어 실행.

 

만약에 호스트랑 서비스 못찾는다 그러면 scp controlplane:/etc ~~ 요부분에서 controlplane 부분을 IP를 입력해주면 됨.

Install Network Plugin - ProjectCalico
kubernetes는 여러종류의 CNI 플러그인을 사용자가 선택하여 설치 할수 있습니다. 다음은 Calico 를 설치하는 내용입니다.

 

# Network Plugin - Calico
# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml
watch kubectl get pods -n calico-system
https://docs.projectcalico.org/getting-started/kubernetes/quickstart

 

레지스트리에서 위의 Calico 설치함. 

두번째 주소 404 not found 떠서 밑에 주소로 실행.

kubectl get pod -A 로 calico 설치 진행중 확인.

둘다 Running으로 바뀌면 설치 완료.

 

Status가 ImagePullBack 등으로 뜰 때가 있는데 하나의 IP에서 많은 사람이 받으면 잠기는 경우가 있으므로 참고.

(풀어달라고 미리 하면 풀어준다고 강사님이 말함.)

 

설치 완료하고 kubectl get node로 노드 상태 확인 하면 Ready 상태로 바뀐 것을 확인 할 수 있다.

Cluster Resource


What is pod
Pods 는 kubernetes의 기능을 사용할 때 최소 단위 이며 배포하는 기본 단위입니다. 하나 혹은 하나 이상의 컨테이너를
그룹으로 만들어 클러스터에 배포 합니다. 그래서 논리적인 집합체인 pod를 이용해 orchestration 기능을 사용할 수 있습
니다. 예를 들면 pod는 여러 노드에 걸쳐 Storage를 사용하거나 network 리소스를 공유할 수 있습니다. 혹은 pod 개수로
어플리케이션의 크기를 자동으로 조절하여 부하를 분산하거나 pod가 문제가 생겼을 때 자동 복구 기능을 통해 시스템을
안정화 할 수 있습니다. 이렇게 여러가지 cluster의 기능을 구현하기 위한 가장 기본적인 작업 단위가 바로 pod입니다.

 

docker run -d -p 443:443 \

--restart=always --name registry \

-v /auth:/certs \

-v ~/image-data:/var/lib/registry \

-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/myregistry.com.crt \

-e REGISTRY_HTTP_TLS_KEY=/certs/myregistry.com.key \

-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \

registry

 

scp로 인증서 가져오기.

POD 생성 확인.

 

kubectl get pod -o wide 명령어로 확인.

지금은 이미지 풀백 에러뜸....

 

풀백에러 구글링 결과

 

1. 존재하지 않는 이미지
가장 흔한 원인으로 저도 이런적이 있지만 쿠버네티스에 애플리케이션을 띄우려는 목적으로 구글링을
하다가 찾은 내용으로 실행할때 자주 발생했던 원인중에 하나입니다.

2. 권한이 필요한 경우
기업에서 사적으로 사용하는 이미지의 경우 외부에 공개되지 않아야 하므로 보안이 걸려있습니다.

3. DockerHub 이슈
DockerHub 에서는 2020년 11월부터 무료사용자에 대해 사용량을 제한하는 정책을 발표했습니다.
6개월간 풀 리퀘스트가 없는 무료사용자의 이미지는 자동 삭제되고 6시간당 200개의 컨테이너
Pull 이 되도록 제한되었습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'클라우드' 카테고리의 다른 글

02. 도커&쿠버네티스 - 2일차  (1) 2023.08.29
01. 도커&쿠버네티스 - 1일차  (0) 2023.08.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함