## Xcode 라이선스 동의
$ sudo xcodebuild -license accept
## bash 설치
$ brew install bash
## bash 버전 확인
$ /bin/bash --version
### GNU bash, version 3.2.57(1)-release (arm64-apple-darwin22)
### Copyright (C) 2007 Free Software Foundation, Inc.
## bash 위치 확인
$ which -a bash
### /opt/homebrew/bin/bash
### /bin/bash
# Set default shell
sudo su
echo "/opt/homebrew/bin/bash" >> /etc/shells
exit
brew install bash-completion@2
export BASH_COMPLETION_COMPAT_DIR="/opt/homebrew/etc/bash_completion.d"
kubectl completion bash >/opt/homebrew/etc/bash_completion.d/kubectl
echo 'export BASH_COMPLETION_COMPAT_DIR="/opt/homebrew/etc/bash_completion.d"'
echo 'alias k=kubectl' >>~/.bash_profile
echo 'complete -F __start_kubectl k' >>~/.bash_profile
cat ~/.zshrc
# >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$('/Users/jeong-yoon/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/Users/jeong-yoon/anaconda3/etc/profile.d/conda.sh" ]; then . "/Users/jeong-yoon/anaconda3/etc/profile.d/conda.sh" else export PATH="/Users/jeong-yoon/anaconda3/bin:$PATH" fi fi unset __conda_setup # <<< conda initialize <<< # /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 export PATH=/opt/homebrew/bin:$PATH JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home PATH=$PATH:$JAVA_HOME/bin export JAVA_HOME export PATH # export PATH="/usr/local/opt/openjdk@17/bin:$PATH"
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
+-zsh:16> mktemp -d
+-zsh:16> cd /var/folders/sr/_jwdzn1j6jxgr13g20ybngc40000gn/T/tmp.SDH9XT0A
+-zsh:17> OS=+-zsh:17> uname
+-zsh:17> OS=+-zsh:17> tr '[:upper:]' '[:lower:]'
+-zsh:17> OS=darwin
+-zsh:18> ARCH=+-zsh:18> uname -m
+-zsh:18> ARCH=+-zsh:18> sed -e s/x86_64/amd64/ -e 's/(arm)(64)\?./\1\2/' -e 's/aarch64$/arm64/'
+-zsh:18> ARCH=arm64
+-zsh:19> KREW=krew-darwin_arm64
+-zsh:20> curl -fsSLO https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-darwin_arm64.tar.gz
+-zsh:21> tar zxvf krew-darwin_arm64.tar.gz
x ./LICENSE
x ./krew-darwin_arm64
+-zsh:22> ./krew-darwin_arm64 install krew
Adding "default" plugin index from https://github.com/kubernetes-sigs/krew-index.git.
Updated the local copy of plugin index.
Installing plugin: krew
Installed plugin: krew
\
| Use this plugin:
| kubectl krew
| Documentation:
| https://krew.sigs.k8s.io/
| Caveats:
| \
| | krew is now installed! To start using kubectl plugins, you need to add
| | krew's installation directory to your PATH:
| |
| | macOS/Linux:
| | - Add the following to your ~/.bashrc or ~/.zshrc:
| | export PATH="{KREW_ROOT:-HOME/.krew}/bin:$PATH"
| | - Restart your shell.
| |
| | * Windows: Add %USERPROFILE%.krew\bin to your PATH environment variable
| |
| | To list krew commands and to get help, run:
| | $ kubectl krew
| | For a full list of available plugins, run:
| | $ kubectl krew search
| |
| | You can find documentation at
| | https://krew.sigs.k8s.io/docs/user-guide/quickstart/.
| /
/
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
kubectl krew
echo "export PATH=\$PATH:\$HOME/.krew/bin" >> ~/.zshrc
source ~/.zshrc
set -x; cd "$(mktemp -d)" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.tar.gz" &&
tar zxvf krew.tar.gz &&
KREW=./krew-"$(uname | tr '[:upper:]' '[:lower:]')_amd64" &&
"$KREW" install krew
$ k krew install ctx
# 로컬 호스트에 등록되어 있는 클러스터 목록 확인
$ k ctx
# 해당 클러스터로 변경
$ k ctx k8s-demo
$ k krew install ns
# 현재 클러스터의 전체 네임스페이스 현황 출력
$ k ns
$ k run nginx --image nginx
### pod/nginx created
$ k run nginx01 --image nginx
$ k get pods
### NAME READY STATUS RESTARTS AGE
### nginx 1/1 Running 0 21s
$ k get pods -o wide
### NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
### nginx 1/1 Running 0 113s 10.244.1.2 k8s-demo-m02 <none> <none>
### nginx01 1/1 Running 0 14s 10.244.1.3 k8s-demo-m02 <none> <none>
- MetalLB 설치에 앞서 로드밸런서 용도로 사용할 IP대역을 지정한다.
- MetalLB의 공식 홈페이지에 안내된 내용에 따라 헬름을 이용해 설치한다.
- my-values.yaml 파일을 수정하기 위해 비주얼 스튜디오 코드에서 파일을 연다.
로드밸런서란?
로드 밸런싱과 로드 밸런서
- 로드 밸런싱
- 네트워크 또는 서버에 가해지는 부하를 분산해주는 기술을 의미한다.
- 로드 밸런서
- 로드 밸런싱 기술을 제공하는 서비스 또는 장치
- 클라이언트와 네트워크 트래픽이 집중되는 서버들 사이에 위치하며 VIP와 함게 구성된다.
- 특정 서버에 부하가 집중되지 않도록 트래픽을 다양한 방법으로 분산하여 서브들의 성능을 최적인 상태로 유지할 수 있도록 한다.
- VIP란?
- VIP란 로드 밸런싱의 대상이 되는 여러 서버를 대표하는 가상의 IP이다.
- 클라이언트들은 서버의 IP로 직접 요청을 하는 것이 아니라 LB가 가지고 있는 VIP를 대상으로 요청한다.
- 그리고 LB는 설정된 부하 분산 방법에 따라 각 서버로 요청을 분산한다.
로드 밸런서의 기본 기능
상태 확인
- 로드 밸런서는 서버들에 대한 주기적인 상태 확인을 통해 서버들의 장애 여부를 판단할 수 있다.
- 이로 인해, 서버에 이상이 생기면 정상적으로 동작하는 서버로 트래픽을 보내주는 Fail-Over가 가능하며, 또한 TCP/UDP 분석이 가능하기 때문에 방화벽의 역할도 수행할 수 있다.
- 종류
- L3 체크: ICMP를 이용해 서버의 IP주소가 통신 가능한 상태인지 확인한다.
- L4 체크: TCP의 3-way handshaking을 통해 각 서버의 포트 상태를 확인한다.
- L7 체크: 애플리케이션 계층에서 체크하는 방법으로 실제 웹 페이지에 통신을 시도해 이상유무를 파악한다.
부하분산(load balancing)
NodePort 서비스의 한계
NodePort 타입 서비스: 노드의 실제 IP 주소로 접근
LoadBalancer 타입 서비스: 로드 밸런서의 IP 주소로 접근
MetalLB
LB 용도로 사용할 IP 대역을 미리 지정할 필요가 있음
MetalLB 0.13 부터 ConfigMap 설정은 deprecated
⇒ 0.13부터는 MetalLB만의 CR, CRD로 설정