kubernetes

:)·2024년 7월 1일
0

Linux

목록 보기
17/17

https://kubernetes.io/ko

개념

  • 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장 가능한 오픈소스 플랫폼
  • 선언적 구성과 자동화를 모두 용이하게 함
  • 쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용가능

기능

  • 서비스 디스커버리와 로드 밸런싱
    - 쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너 노출 가능
    - 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 안정적 배포 가능
  • 스토리지 오케스트레이션
    - 쿠버네티스 사용시 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템 자동 탑재
  • 자동화된 롤아웃과 롤백
    - 쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술가능, 현재 상태를 원하는 상태로 설정한 속도에 따라 변경 가능
    → 쿠버네티스 자동화로 배포용 새 컨테이너 생성, 기존 컨테이너 제거, 모든 리소스를 새 컨테이너에 적용 가능
  • 자동화된 빈 패킹(bin packing)
    - 컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공
    - 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 쿠버네티스에게 지시
    - 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 함
  • 자동화된 복구(self-healing)
    - 실패한 컨테이너 재시작, 컨테이너 교체, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너 죽임 → 서비스 준비가 끝날 때까지 과정 보여주지 않음
  • 시크릿과 구성 관리
    - 쿠버네티스를 사용시 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장, 관리 가능
    - 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트 가능

종류

  • Flannel
    - 가장 단순한 쿠버네티스
    UDP나 VxLAN을 사용하여 가상 네트워크를 구성
    물리적인 네트워크 인프라 변경없이 쿠버네티스 클러스터를 구성할 때 사용
    신속함, 고도 확장 불가, 일부 환경 성능 문제 발생.
  • Calico
    - 고성능 솔루션
    BGP 프로토콜을 사용(네트워크 라우팅)
    IP-in-IP, VXLAN, 또는 BGP 통해 가상 망 구성가능
    네트워크 정책 엔진을 제공
    대규모 환경 적합, 다중 클러스터 환경에도 사용.
  • WeaveNet
    - 가벼우면서 유연한 쿠버네티스전용 네트워킹
    가상 네트워크구성가능
    UDP 또는 VXLAN 사용
    노드 간에 가상 네트워크를 자동으로 연결
    쿠버네티스 클러스터 설정이 간단
    다중 클러스터 환경에서도 사용
    네트워크 정책을 정의

설치(Calico)

도커 로그인
docker run -it ubuntu bash
hostnamectl set-hostname k8s-master-00
ufw disable
swapoff -a

  • vi /etc/fstab
    스왑부분 주석
  • vi /etc/containerd/config.toml
    주석 cri

cat << EOF | tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF

cat << EOF | tee /etc/sysctl.d/sevas.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

cat << EOF | tee /etc/modules-load.d/sevas.conf
overlay
br_netfilter
EOF

확인 lsmod | grep br_netfilter
설정로드 sysctl --system

  • 레포지터리 설치

apt-get install -y apt-transport-https
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

docker login
kubelet --version
apt-get install nfs-kernel-server

systemctl daemon-reload
systemctl enable docker
systemctl enable kubelet
systemctl enable containerd
systemctl restart docker
systemctl restart kubelet
systemctl restart containerd
systemctl status kubelet

containerd config default | tee /etc/containerd/config.toml sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

service containerd restart
service kubelet restart
service NetworkManager restart
nslookup google.com

마스터에서만 실행

kubeadm init --pod-network-cidr=192.168.0.0/16

  • 메세지 → 해시 기록해둘 것
    Your Kubernetes control-plane has initialized successfully!
    To start using your cluster, you need to run the following as a regular user:
    mkdir -p HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):(id -g) $HOME/.kube/config
    Alternatively, if you are the root user, you can run:
    export KUBECONFIG=/etc/kubernetes/admin.conf
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
    https://kubernetes.io/docs/concepts/cluster-administration/addons/
    Then you can join any number of worker nodes by running the following on each as root:
    kubeadm join 192.168.10.100:6443 --token t74935.2sk3buhm764uwkbi \
    --discovery-token-ca-cert-hash sha256: 해시 출력
  • vi /root/.bashrc
    export KUBECONFIG=/etc/kubernetes/admin.conf (추가)
        

bash
set |grep KUBE

노드에서만 실행

mkdir -p $HOME/.kube
scp 172.16.10.100:/etc/kubernetes/admin.conf $HOME/.kube/config
cp -a $HOME/.kube/config /etc/kubernetes/admin.conf

  • vi bashrc
    export KUBECONFIG=/etc/kubernetes/admin.conf

토큰

쿠버네티스에서 사용할 인증정보(secret) 를 생성
docker login
cat /root/.docker/config.json

생성 kubectl create secret generic master --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson
확인 kubeadm token list
접속
kubeadm join <192.168.0.10:6443> --token <Token 값> --discovery-token-ca-cert-hash sha256:<Hash 값>

profile
:) GITHUB: https://github.com/YJ2123412

0개의 댓글