Kubernetes v1.27 & Istio & etc

jsbak·2023년 6월 21일
0

참고

목록 보기
10/12

Kubernetes install

local 환경

  • 가상 머신 제원 : CentOS7

모든 노드에 설정

기본 설정

$ cat <<EOF >> /etc/hosts
192.168.1.159 master1
192.168.2.238 worker1
192.168.2.249 worker2
EOF

$ hostnamectl set-hostname HOST_NAME(ex. master / worker1 ...)

$ systemctl disable --now firewalld

# SELinux 비활성화
# 컨테이너가 호스트 파일시스템(예를 들어, 파드 네트워크에 필요한)에 접근하도록 허용하는 데 필요하다. kubelet에서 SELinux 지원이 개선될 때까지 이 작업을 수행해야 한다.
$ setenforce 0
$ sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

# 스왑 메모리 제거
$ swapoff -a
$ sed -i '/ swap / s/^/#/' /etc/fstab

# IPv4 포워딩 및 iptables에서 브리지된 트래픽 확인
# https://kubernetes.io/docs/setup/production-environment/container-runtimes/
$ cat <<EOF > /etc/sysctl.d/k8s.conf # kubernetes
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

$ sysctl --system
# 1로 설정되었는지 확인
$ sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
$ reboot

docker engine install

$ sudo yum -y install git wget curl
$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
$ systemctl enable --now docker

cri-dockerd install - 컨테이너 런타임 설치

  • 도커 엔진은 컨테이너 런타임이 쿠버네티스와 호환되기 위한 요구 사항인 CRI를 만족하지 않는다. 이러한 이유로, 추가 서비스인 cri-dockerd가 설치되어야 한다.
    • cri-dockerd는 쿠버네티스 버전 1.24부터 kubelet에서 제거된 기존 내장 도커 엔진 지원을 기반으로 한 프로젝트
    • github : cir-dockerd
# 운영체제 아키텍처 확인
$ uname -a # CentOS7 => el7.x86_64 

# 원하는 버전 설치 
# https://github.com/Mirantis/cri-dockerd/releases/download/v${VERSION}/cri-dockerd-${VERSION}.${ARCH}.tgz
# 최신 버전 설치
$ VER=$(curl -s https://api.github.com/repos/Mirantis/cri-dockerd/releases/latest|grep tag_name | cut -d '"' -f 4|sed 's/v//g')
$ echo $VER

# v0.3.3 패키지 설치 예시 - 2023.06.21 일자 lts 버전
$ wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.3/cri-dockerd-0.3.3-3.el7.x86_64.rpm -O cri-dockerd.rpm

# CentOS7 에서 cri-docker.rpm 설치 
$ yum install -y cri-dockerd.rpm
$ systemctl daemon-reload
$ systemctl enable cri-docker.service
$ systemctl enable --now cri-docker.socket
$ systemctl status cri-docker
$ cri-dockerd --version

kubeadm, kubelet 및 kubectl 설치

# 리포지토리 설정
$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

# LTS 버전 설치
$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# v1.27.0 설치
$ sudo yum install -y kubelet-1.27.0 kubeadm-1.27.0 kubectl-1.27.0 --disableexcludes=kubernetes
$ sudo systemctl enable --now kubelet
$ poweroff

Configuring a cgroup driver

  • Configuring a cgroup driver
    • 컨테이너 런타임 페이지에서는 kubeadm이 kubelet을 systemd 서비스로 관리하기 때문에 kubelet의 기본 cgroupfs 드라이버 대신 kubeadm 기반 설정에 systemd 드라이버가 권장된다고 설명합니다.
    • ❗ v1.22 이상에서 사용자가 KubeletConfiguration에서 cgroupDriver 필드를 설정하지 않으면 kubeadm은 이를 systemd로 기본 설정합니다.

각 노드별 설정

Master 노드

  • kubeadm init
  • --apiserver-advertise-address 는 본인의 Master 노드를 입력
$ kubeadm init --apiserver-advertise-address=192.168.1.159 --pod-network-cidr=10.244.0.0/16 --cri-socket /run/cri-dockerd.sock
--apiserver-advertise-address <string>API 서버가 수신 중임을 알리는 IP 주소, 설정하지 않으면 기본 네트워크 인터페이스 사용 - 즉, 마스터 노드
--pod-network-cidr <string>포드 네트워크의 IP 주소 범위를 지정, 설정된 경우 컨트롤 플레인은 모든 노드에 CIDR을 자동으로 할당
--cri-socket <string>Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this value; use this option only if you have more than one CRI installed or if you have non-standard CRI socket.

클러스터 초기 시작 설정

  • 컨트롤 플레인이 초기화되고 클러스터를 시작하기 위한 설정
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

# root 유저일 경우 실행
$ export KUBECONFIG=/etc/kubernetes/admin.conf

Pod 네트워크 설정

$ kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

워커 노드 설정

노드 가입

  • join-nodes
  • 마스터 노드에서 kubeadm init ... 이후 나온 스크립트
$ kubeadm join 192.168.1.159:6443 --token ynubvp.41q3tia2ylqp7pjl \
        --discovery-token-ca-cert-hash sha256:e859a67868e72e981e26062548f20f516a85a120ed2ea3452635fd7804126a84
        
# 런타임이 필요한 경우 "--cri-socket /run/cri-dockerd.sock" 추가
$ kubeadm join 192.168.1.159:6443 --token ynubvp.41q3tia2ylqp7pjl \
        --discovery-token-ca-cert-hash sha256:e859a67868e72e981e26062548f20f516a85a120ed2ea3452635fd7804126a84 --cri-socket /run/cri-dockerd.sock

노드 가입후 마스터 노드에서 확인

$ kubectl get no

마스터 노드 kubectl 환경 변수 셋팅

$ source <(kubectl completion bash)
	# 시스템이 껏다 켜지더라도 자동완경 가능하게 설정
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ exit

$ kubectl version --client
$ kubectl get all

Istio install

Istio 다운로드

# CentOS7 에 맞게
# x86_64 아키텍처용 Istio 1.18.0 버전 다운로드
$ curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.18.0 TARGET_ARCH=x86_64 sh -


################# 참고 #################
# 특정 아키텍처와 특정버전 설치 
$ curl -L https://istio.io/downloadIstio | ISTIO_VERSION=버전명시 TARGET_ARCH=아키텍처 명시 sh -

# 최신 LTS 버전
$ curl -L https://istio.io/downloadIstio | sh -
########################################

# 환경 변수 세팅
$ export PATH=$PWD/bin:$PATH

Istio 설치

  • install 명령 수행

    
    # 기본 프로필로 설치, 데모 프로필(istioctl install --set profile=demo)
    $ istioctl install -y
    $ kubectl get -n istio-system po


Envoy 사이드카 프록시 설정

  • 나중에 애플리케이션을 배포할 때 Envoy 사이드카 프록시를 자동으로 삽입하도록 Istio 에 지시하는 네임스페이스 레이블 을 추가
# "default" 네임스페이스에 프록시 주입 설정
$ kubectl label namespace default istio-injection=enabled

addons plugin 설치

  • 애드온 목록

    
    $ cd ./istio-1.18.0/samples/addons/

prometheus

# NodePort: 30281 로 부여함.
$ vi ./istio-1.18.0/samples/addons/prometheus.yaml
$ kubectl apply -f ./istio-1.18.0/samples/addons/prometheus.yaml
$ kubectl -n istio-system get svc

kiali

# http 부분 : NodePort: 30291 로 부여함.
$ vi ./istio-1.18.0/samples/addons/kiali.yaml
$ kubectl apply -f ./istio-1.18.0/samples/addons/kiali.yaml
$ kubectl -n istio-system get svc

grafana

# NodePort: 30282 로 부여함.
$ vi ./istio-1.18.0/samples/addons/grafana..yaml
$ kubectl apply -f ./istio-1.18.0/samples/addons/grafana..yaml
$ kubectl -n istio-system get svc

해야될 것

  • Terraform 으로 인프라 구축

    • GKE
    • EKS Cluster 구축
      • VPC 생성
      • LB 연동 알아보기
      • EKS 를 위한 IAM ??
      • NAT 게이트 웨이 필요 각 서브넷 별로 EKS 기본 아키텍처
      • Bastion Host 필요
    • 다른 계정에서 리소스 생성할 것도 생각해서 기본 생성 따로 참조형 따로 남겨두기
      • Ex. v1 은 VPC 생성, v2 는 VPC 참조 및 VPC 위에 쌓을 리소스 생성
  • k8s cluster - X => EKS 로 대체

  • istio

    • istio addons (; Prometheus, Grafana, Kiali)
  • monitoring - addons 들 사용법

    • 각 대시보드 사용법 숙지
    • 각 대시보드 적용
  • k8s

    • deployment 생성
    • service 생성
      • kiali 에서 확인 가능하도록 microservice 구축해야함.
      • 테스트 목적으로는 nginx image 를 이용해서 container 에서 curl 명령으로 지속적인 service 호출 테스트 해볼 수 있음. (; kiali 에서 그림 확인용도)
  • istio 설정

    • ingress gate way
    • 트래픽 처리
  • 소프트웨어 개발

    • [ ] MSA
      • JS 기반
      • JAVA 기반
  • istio 에서 외부 트래픽 관리하기 ?

참고

제거

$ sudo kubeadm reset
$ sudo kubeadm reset --cri-socket /run/cri-dockerd.sock
$ sudo systemctl restart kubelet
$ sudo reboot
profile
끄적끄적 쓰는곳

0개의 댓글