일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Floyd
- kafka #ackmode #manual #acknowledge
- kafka #consumer #autoStartup
- 토마토(고)
- 1045
- 스택
- 2613
- Floyd 알고리즘
- hexagonal architecture #layer architecture #아키텍쳐 #헥사고날
- 큐
- 새로운 방
- 태그를 입력해 주세요.
- 1108
- maven #메이븐 #빌드 #build #lifecycle
- 페이지전환
- sql #오라클 #oracle #sequence #foreach #insert #mybatis
- 정올
- 오류교정
- 김씨만행복한세상
- vue
- 암스트롱 수
- 최단거리
- 페이지 전환
- 알고리즘
- 코드그라운드
- kafka connect #debizium #transform
- JAVA #필수값
- 1037
- 새로운방
- Queue
- Today
- Total
별집사의 IT세상
Kubernetes 핵심개념 및 운영 실무(1일차) 본문
kubectl apply -f yam.yaml #yaml 파일 등록, 수정
kubectl delete -f yam.yaml #yaml 파일로 등록한 파드, 서비스 등 삭제
kubectl run 파드명 --image nginx --labels "app=web-svc" --port 80 #파드 등록
kubectl get po,svc,deploy # 파드, 서비스, 디플로이 조회
kubectl get all -n 이름 #(이름과 관련된 모든 정보 조회)
kubectl exec -it 파드명 -c 컨테이너명 -- bash #해당 파드로 접속
kubectl describe deploy 디플로이명 #상세보기
kubectl set image deploy 디플로이명 nginx=nginx:1.17.1 --record# 디플로이 이미지 변경
#record 변경사항 기록
kubectl describe po recreate-747c5df7bb-nb585 | grep Image #변경된 이미지 보기
kubectl scale deploy 디플로이명 --replicas 7 # 디폴로이 파드 수 변경
kubectl rollout history deploy 디플로이명 #디플로이 버전 확인
kubectl rollout history deploy 디플로이명 --revision 1 #디플로이 버전 상세확인
kubectl rollout undo deploy 디플로이명 --to-revision 1 #디플로이 버전 돌아가기
kubectl create deploy nginx-main --image=nginx #오브젝트 생성
kubectl expose deploy nginx-main --name nginx-main-svc --port 80 #오브젝트 서비스 매핑 및 배포
hostnamectl set-hostname node1.test.com #호스트네임 변경
vi /etc/netplan/00-installer-config.yaml
6행 - 192.168.137.20/24 # if 수정
netplan apply # ip addr 로 수정된 ip 확인
chmod 1777 /nfsdata #소유권한 변경
chown nobody:nogroup /nfsdata #소유자 변경
주요 명령어
1일차
- 볼륨 - 5장
- 컨테이너가 삭제되어도 데이터 유지 할 경우 볼륨으로 - 영구적
- 프로그램 > 프로세스기존 프로그램은 운영체제의 버전에 따라 문제가 생기는 경우가 많음이를 실행하기 위해 여러 파일들이 모여 있는 게 컨테이너 이미지컨테이너 이미지를 만들기 위해 설계도(파일:Dockerfile)이 필요하다이 브릿지가 공용 ip를 컨테이너와 연결해준다. 도커로 컨테이너를 연결하면 쉽게 연결되지만, 문제가 생긴다.
- 장애에 대한 대비가 안된다.
- 부하 분산이 안된다.
- 장애를 대비하고 버전관리 등을 할 수 있는 도구 - 이러한 기능들을 자동으로 처리해주는 도구이다.
- ip addr에 추가된 docker0(172.17.xx)가 192.168.137.10과 새로 만들어주는 ‘www1’을 연결해주는 브릿지, 공용 포트 8080과 www1(80)을 연결한다. (-p 8080:80)
- 이미지를 제공하는 것이 레지스트리
- 컨테이너는 이를 예방할 수 있음(외부와 격리되어 다른 애플리케이션의 영향을 받지 않는다)
- 컨테이너 이미지 > 컨테이너 (차이점은 격리)
도커 running > stop > remove
컨테이너 삭제 시 stop 이후 삭제를 하거나 docker rm -f 컨테이너명 처럼 force 옵션을 주면 된다.
docker rm -f www1
삭제 이후 같은 이름으로 만들면 기존데이터가 다 날아가는데 이를 유지하려면 볼륨이 필요함
docker run -d --name www3 -p 8383:80 -v webpage:/usr/share/nginx/html nginx
이후 저 볼륨안에 있는 html 값을 수정시키면, 삭제 이후 새로 컨테이너를 생성할때 해당 볼륨을 불러오면 내용이 유지된다.
RUN set -x \
&& groupadd --system --gid 101 nginx \\
&& useradd --system --gid nginx --no-create-home --home /nonexistent --comment "nginx user" --shell /bin/false --uid 101 nginx \\
&& apt-get update \\
&& apt-get install --no-install-recommends --no-install-suggests -y gnupg1 ca-certificates \\
&& \\
위 처럼 && 으로 붙이는 이유는 명령어 실행시 레이어가 계속 쌓이는데 레이어가 많아지면 용량이 많아져서 최대한 적게 하려고 사용한다.
FROM ubuntu
LABEL maintainer="이름 <이메일@주소>"
RUN mkdir /mywebpage \
&& useradd webuser \
&& groupadd was \
&& apt-get update \
&& apt-get -y install nginx \
&& rm -rf /var/lib/apt/lists/*
COPY index.html /usr/share/nginx/html/
CMD ["nginx", "-g", "daemon off;"]
docker build -t myweb:3.0 -f 1.txt .
#Dockerfile 이름으로 만들 경우 -f 1.txt는 생략 가능, 이름을 지정하면 -f 명령어 사용
docker rm -f $(docker ps -aq)
docker system prune -a
→ docker image ls
→ docker ps -a
→ docker volume ls
docker volume rm webpage
도커 내용을 날릴때(삭제할 때) volume는 유지되어서 volume는 따로 삭제해줘야한다!
Kubernetes
https://kubernetes.io/docs/home/
https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
1. docker(containerd.io 설치)
2. swapon 활성화 여부
swapon -s >> 활성화 되어있으면 닫아야한다.
swapoff -a 시 비활성화 되지만, 재부팅 시 다시 돌아간다. >> vi /etc/fstab → :set nu
12행 #/swap.img~ 을 주석처리하면 default 처리 된다.
3. 기본 파일 세팅
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
br_netfilter
4. 쿠버네티스 설치
https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
에서 두번째 옵션 선택
• Install using native package management
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
목차에 따라 명령어 입력하면 된다.
sudo apt-get update
# apt-transport-https may be a dummy package; if so, you can skip that package
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
1. Download the public signing key for the Kubernetes package repositories. The same signing key is used for all repositories so you can disregard the version in the URL:
# If the directory `/etc/apt/keyrings` does not exist, it should be created before the curl command, read the note below.
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL <https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key> | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
2. Add the appropriate Kubernetes apt repository. Please note that this repository have packages only for Kubernetes 1.29; for other Kubernetes minor versions, you need to change the Kubernetes minor version in the URL to match your desired minor version (you should also check that you are reading the documentation for the version of Kubernetes that you plan to install).
# This overwrites any existing configuration in /etc/apt/sources.list.d/kubernetes.list
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] <https://pkgs.k8s.io/core:/stable:/v1.29/deb/> /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
3. Update the apt package index, install kubelet, kubeadm and kubectl, and pin their version:
sudo apt-get update
apt-get install -y kubelet=1.29.2-1.1 kubeadm=1.29.2-1.1 kubectl=1.29.2-1.1
sudo apt-mark hold kubelet kubeadm kubectl
최신버전 아닐땐 버전명 명시
4. (Optional) Enable the kubelet service before running kubeadm:
sudo systemctl enable --now kubelet
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
마무리 후 재부팅
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
이후 오류? 를 예방하기 위해 파일을 옮겨준다(mv /etc/containerd/config.toml /tmp)
- Update the apt package index and install packages needed to use the Kubernetes apt repository:
이후 호스트 추가한다.
vi /etc/hosts ← 맨 밑에 추가
…생략…
192.168.137.10 master.test.com
192.168.137.11 node1.test.com
192.168.137.12 node2.test.com
192.168.137.13 node3.test.com
hostnamectl set-hostname master.test.com
5. master 컴 복제
vm에서 기분 마스터를 복제한다.
머신 메뉴 - 복제 - 이름: node1 - MAC 주소정책: 모든 네트워크 어댑터의 새 MAC 주소 생성 - 완전한 복제 선택
머신 메뉴 - 복제 - 이름: node2 - MAC 주소정책: 모든 네트워크 어댑터의 새 MAC 주소 생성 - 완전한 복제 선택
머신 메뉴 - 복제 - 이름: node3 - MAC 주소정책: 모든 네트워크 어댑터의 새 MAC 주소 생성 - 완전한 복제 선택
kubeadm join 192.168.137.10:6443 --token j09ggf.rvznqzzxyrfvvt2b \ --discovery-token-ca-cert-hash sha256:84e3ee6957ffa3a1869bf920a123e0700b693efccfbefefb0ff93fde1b1c5282
각자 머신으로 접속 > hostnamectl set-hostname node1.test.com 각 호스트명 변경
vi /etc/netplan/00-installer-config.yaml
..생략..
6행 - 192.168.137.11/24 ← 기존의 10을 11로 수정
netplan apply
접속을 쉽게 하기 위해 ssh 생성 >> ssh-keygen
ssh-copy-id node1.test.com → yes → root 유저의 암호 입력
ssh-copy-id node2.test.com → yes → root 유저의 암호 입력
ssh-copy-id node3.test.com → yes → root 유저의 암호 입력
ssh node1.test.com
kubeadm join 192.168.137.10:6443 --token j9yyxr.oz5681dphlgai5f3 --discovery-token-ca-cert-hash sha256:cfea5960c16fd9e37c05ab5bfe6ea7f4d6278bc82abcf1404219f32efdc4901e
@@ 시간이 지난 시점에 추가로 node 를 join 해야하는 경우
기존 token 값을 확인
kubeadm token list
kubeadm token delete 기존의token값
→ kubeadm token list 로 삭제 확인
kubeadm token create
→ kubeadm token list 로 생성 확인
해쉬값을 알아내기 위해 아래의 명령 실행
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
token 값과 해쉬값을 이용해 join 구문 완성
kubeadm join 192.168.137.10:6443 --token 새로생성한 token값 --discovery-token-ca-cert-hash sha256:확인한해쉬값
위의 완성된 구문을 추가 할 node 에서 실행
kubeadm join 192.168.137.10:6443 --token 6cbiyg.xni0cffn1wuukh4f --discovery-token-ca-cert-hash sha256:84e3ee6957ffa3a1869bf920a123e0700b693efccfbefefb0ff93fde1b1c5282
해당 값은 시간제한이 있음(24시간)
각 노드에 접속해서 조인 연결
30초가량 지나고 ready인지 확인
kubectl run web1 --image nginx:1.12 pod 생성 이후 kubectl get pod로 pod 확인
자세한 pod 설명 >> kubectl describe pod
ubuntu - root유저가 default 비활성
활성화 sudo passwd root >> 암호 초기화 >> exit >> root로 재로그인
설치 편하게 하기 위해 putty 사용 >> root로 로그인 시 deny
vi /etc/ssh/sshd_config > :set nu(행번호 표시)
34번째 행에 주석처리 해제 후 yes로 변경
vm - 스냅샷 > 현재상태 저장 : 문제가 생기면 복원할 수 있음
@@ Docker 설치
apt-get update
apt-get install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-cache madison docker-ce | awk '{ print $3 }'
VERSION_STRING=5:20.10.24~3-0~ubuntu-focal
apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io
docker info
docker pull nginx #도커 다운
docker image ls
docker ps #도커 프로세스
docker run -d #도커실행(-d :backgroud로 실행 -p:port지정)