목록공부/Docker&K8S (27)
JINIers
1. app=nginx 레이블을 가진 pod 생성(yaml 이용) # label_test.yaml apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx pod 생성 kubectl create -f label-test.yaml 2. app=nginx 레이블을 가진 pod get kubectl get pod 3. get pod의 레이블 확인 kubectl get pod --show-labels 4. app=nginx 레이블을 가진 파드에 레이블 추가(team=dev1) kubectl label pod nginx team=dev1 kubectl get pod --sh..
레이블 리소스에 첨부하는 임의의 키 값 쌍 ((ex) app:test, rel:beta) 레이블 셀렉터를 사용하면 각종 리소스를 필터링하여 선택할 수 있음 리소스: 한개 이상의 레이블을 가질 수 있음 리소스 만드는 시점에 레이블을 첨부한다. 기존 리소스에 레이블 값 수정&추가 가능 pod 레이블 확인 pod 생성 # http-go-v2.yaml apiVersion: v1 kind: Pod metadata: name: http-go labels: creation_method: manual evn: prod spec: containers: - name: http-go image: ______/http-go ports: - containerPort: 8080 protocol: TCP kubectl create..
liveness-exec pod 생성 # livemess.yaml apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: registry.k8s.io/busybox args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600 livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 pod 세부내용 확인 kubectl describe pod liveness-e..
Probes 종류(3가지) Liveness, Readiness, Startup 1. Liveness Probe 컨테이너가 살았는지 판단하고 다시 시작하는 기능 컨테이너의 상태를 스스로 판단하여 교착상태에 빠진 컨테이너를 재시작함 버그가 생겨도 높은 가용성을 보임 Liveness Probe Pod 생성 바로가기 2. Readiness Probe pod가 준비된 상태에 있는지 확인하고 정상 서비스를 시작하는 기능 pod가 적절하게 준비되지 않은 경우 로드밸런싱을 하지 않음 3. Startup Probe 애플리케이션의 시작시기를 확인하여 가용성을 높이는 기능 Liveness, Readiness의 기능을 비활성화 컨테이너가 시작할 수 있는 시간을 빌어준다.
1. 모든 리소스 삭제 kubectl delete all --all 2. yaml 파일 이용 jenkins-manual pod 생성 # jenkins-manual-pod.yaml apiVersion: v1 kind: Pod metadata: name: jenkins-manual spec: containers: - name: jenkins image: jenkins/jenkins:lts # image: jenkins 하니까 errimagepull이 떠서 버전명을 지정 ports: - containerPort: 8080 pod 생성 kubectl create -f jenkins-manual-pod.yaml 3. jenkins pod에서 curl 명령어로 localhost:8080 접속 kubectl exec..
POD 참고링크 레전드 귀찮음 패드에 필기 갈긴거 복붙하고싶음 힝..ㅜ (계속 수정) (오지는 복붙 하지만 정리) 1 pod - 1 container (O) / but 이걸 권장하는 편: 여러 프로세스를 실행하기 위해서는 컨테이너당 단일 프로세스가 적합 1 pod - n container (O) pod는 다수의 노드에 걸쳐서 실행되지 않고 단일노드에서 실행된다. pod 특징 - k8s에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위 - 포드의 모든 컨테이너는 동일한 네트워크&네임스페이스에서 실행된다. → 프로세스가 밀접하게 연관되어있어 하나의 환경에서 동작하는 것처럼 보임 - 같은 host name, network interface 공유 → 포트 충돌 가능성↑ 대충 이정도 파드를 직접 만..
사용중인 pod 스케일하기 일단 기존에 있던 pod 확인 kubectl get pod NAME READY STATUS RESTARTS AGE tc-666dc7d777-j42ts 1/1 Running 0 31h tc-666dc7d777-j4vg5 1/1 Running 0 30h tc-666dc7d777-r28gv 1/1 Running 0 30h tc-666dc7d777-tfsh8 1/1 Running 0 31h tc-666dc7d777-v7fjs 1/1 Running 0 31h 5개나 있다.. 이걸 3개로 줄여보자 pod scale kubectl scale deploy tc --replicas=3 3개로 줄인 뒤에 get pod로 확인한다. kubectl get pod -w kubectl get pod *..
컨테이너 배포하기 전에 우분투 환경에서 쿠버네티스 클러스터 구성 보러가기 아키텍처 이렇게 구동되게 만들 것임 LB(on-prem)를 제외한 클러스터 안에 것을 생성 deploy 생성 kubectl create deploy tc --image=consol/tomcat-7.0 --replicas=5 port expose kubectl expose deploy tc --type=NodePort --port=80 --target-port=8080 포트를 열어주지 않으면 deploy 내 pod 생성이 되지 않는다. 하지만 포트 오픈을 하면 pod와 deploy가 생성된 것을 알 수 있다. ip 확인 kubectl get svc 나는 구글에 vm으로 만들었기때문에 구글의 인터널 아이피를 입력해서 접속이 잘 되는지 ..
※ GCP에서 vm으로 구축하였다. vm 구성 머신타입 : n2-standard-2 * cpu는 2 이상이어야한다. 부트디스크 : 100gb 그럼 이제 설정따리를 해주면 됨 강사님은 체크리스트를 만들어서 하나씩 체크를 해주셨다. 체크리스트 램: 최소 2GB cpu: 2개 이상 클러스터 내 네트워크 연결 특정포트 개방 스왑 비활성화 대충 이렇게 볼 수 있다. vm system 업데이트 # root로 접속 sudo -i # vm 업데이트 apt update # root가 아닐경우 sudo apt update 스왑 비활성화 sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 컨테이너 런타임 구성 참고링크 * using docker reposi..
이걸 할거임 ※ 컨테이너 생성 전 클러스터를 생성해준다. node 확인 kubectl get node 컨테이너 배포 kubectl create deploy tc --image=consol/tomcat-7.0 --replicas=5 * pod와 deployment의 차이점 pod: 1개만 생성 및 관리 deploy: pod의 관리그룹, 관리그룹에서 지정된 pod들이 생성된다. 그래서 그림으로 본다면 아래처럼 된다. 컨테이너를 외부로 노출 kubectl expose deploy tc --type=LoadBalancer --port=80 --target-port=8080 생성된 pod와 svc 확인 * 여기서는 서비스가 포트를 외부로 노출시키는 기능을 가지고 있다. kubectl get pod,svc LB로 ..
이미지 검색 docker search xampp 컨테이너 실행 docker run --name wp -p 80:80 -d tomsik68/xampp 워드프레스에 필요한 파일 다운로드 요기로 들어가서 링크 주소 복사 wget https://ko.wordpress.org/latest-ko_KR.tar.gz 파일 압축 풀기 tar -xf latest-ko_KR.tar.gz 워드프레스 컨테이너 쉘 진입 docker exec -it wp bash 소유권 변경 후 해당 디렉터리로 이동 chown daemon. /opt/lampp/htdocs cd /opt/lamm/htdocs 디렉토리 내 파일 정리 # 백업디렉토리 생성 mkdir backup # 파일 이동 mv * ./backup exit 파일을 컨테이너에 넣기 ..
private registry 생성 docker run -d --name docker-registry -p 5000:5000 registry 컨테이너가 생성 됐는지 확인 docker ps 웹으로 접속해서 확인 127.0.0.1:5000/v2 docker tag twd5741/echo_test:3.7 127.0.0.1:5000/echo_test * ip와 포트번호를 같이 적어서 5000번 포트에 레지스트리가 있다는 것을 알려야함 그리고 push 해준다. image push docker push 127.0.0.1:5000/echo_test 이미지 test # 일단 이미지 삭제 docker rmi `docker images -q` -f # 이미지 확인 docker images REPOSITORY TAG IMA..
도커허브에 가입이 되어있어야한다. 터미널에 로그인을 해준다. docker login 도커 태그 변경 docker tag echo_test:latest [dockerhub ID]/echo_test:3.7 * 태그는 바뀌었지만 image ID는 echo_test와 똑같다. 이미지 푸시(→도커허브) docker push [docker ID]/echo_test:3.7 * 버전을 안붙이니 에러가 났다.. 그럼 이렇게 이미지가 허브에 저장됨 호스트에 저장된 이미지를 지우고 도커 허브에 있는 이미지 이용 컨테이너 생성 이미지 삭제 docker rmi `docker images -q` # 안지워지면 -f 추가 docker rmi `docker images -q` -f 도커허브 이미지 이용 컨테이너 생성 docker r..
도커로 빌드할 이미지 작성(testserver.py) # testserver.py import socket with socket.socket() as s: s.bind(("0.0.0.0", 12345))# 12345 포트 open s.listen() print("servier is startd") conn, addr = s.accept() # conn: 클라이언트와 통신할 소켓 # addr: 클라이언트의 정보가 들어있음 with conn: print("connected by", addr) while True: data = conn.recv(1024) if not data: break conn.sendall(data) testserver.py 실행 python3 testserver.py 다른 탭을 열어 연..
컨테이너 생성 docker run -d --name nx -e env_name=test1234 --rm nginx nginx로 임시컨테이너(--rm)를 생성 실행 중인 컨테이너 확인 docker ps 컨테이너 쉘 접속 docker exec -it nx bash 설정된 환경변수 확인 printenv 환경변수 골라보기 printenv [환경변수명] or echo $[환경변수명] mysql 서비스 구동 docker run --name ms -e MYSQL_ROOT_PASSWORD='[password]' -d --rm mysql mysql 접속 docker exec -it ms mysql -u root -p sql 내 데이터베이스 보기 show databases;
1. 기존 설치된 모든 컨테이너와 이미지 정지 및 삭제 docker stop `docker ps -a -q` docker rm `docker ps -a -q` # 이미지 삭제 docker rmi `docker images -q` 2. 도커 기능을 사용해 jenkins 검색 docker search jenkins 3. jenkins 이용 설치 # 이미지 pull docker pull jenkins/jenkins # 이미지 포트 확인 docker inspect jenkins/jenkins:latest 8080 포트를 사용하는 것을 알 수 있다. # 임시컨테이너로 생성(--rm 옵션을 넣어준다) docker run -d -p 8080:8080 --name jk jenkins/jenkins 4. jenkins ..
포트포워딩으로 톰캣 실행 docker run -d --name tc -p 80:8080 consol/tomcat-7.0 실행 확인 curl 127.0.0.1 or wget -o- -q 127.0.0.1 컨테이너 내부 쉘 실행 docker exec -it [컨테이너명] /bin/bash 컨테이너 로그 확인 docker logs [컨테이너명] 프로그램이 실행될 때 출력되는 것을 로그로 담음 호스트의 파일을 도커 컨테이너로 넣기 # test 파일생성 echo testtxt > test.txt # docker container 내부로 파일 복사 docker cp [/경로/파일명] [컨테이너명]:[/경로/파일명] docker cp test.txt tc:/ # 파일 확인 docker excec -it tc cat ..
이미지 정보 확인 docker info root@server1-VirtualBox:~# docker info Client: Context: default Debug Mode: false Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 1 Server Version: 20.10.12 Storage Driver: overlay2# 스토리지가 설치되어있는 디렉토리 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true userxattr: false Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 1 Pl..
도커 라이프 사이클 pull이 되어있는 이미지라면 pull run 해도 이미지가 다시 pull 되지 않음 run 시 컨테이너는 create → start 된다. run 2번 시행 시, 기존 컨테이너는 냅두고 새로운 컨테이너를 생성(create)하여 시작(start) * run : create가 필요할 때 사용하는 것이 좋음 이미지 가져오기(pull) docker pull [이미지] 컨테이너 생성(create) docker create -p 80:80 --name nx nginx 현재 실행 중인 컨테이너 확인 docker ps -a 컨테이너 시작(start) docker start [컨테이너이름 or 컨테이너id] 컨테이너 시작(run = create + start) docker run -d -p 80:8..
1. 마이크로 서비스 독립적인 실행 및 배포가 가능한 마이크로 서비스 2. 컨테이너 경량회된 컨테이너 단위 수평적 확장 3. DevOps 개발팀과 운영팀간 단일한 협업 프로세스 4. CI/CD 소규모 개발팀별 자율적, 독립적 서비스 운영
젠킨스를 설치 후 docker pipeline 플러그인 설치를 한 뒤 restart 버튼을 눌렀는데 이후 서버로 재접속이 되지 않은 에러 발생 컨테이너 상태 확인 docker ps -a status가 exited 된 것을 확인했다. root@cicd:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f5029f3d8d2c jenkins/jenkins:lts "/usr/bin/tini -- /u…" 7 minutes ago Exited (5) 3 minutes ago jenkins 컨테이너를 다시 실행시켜 줬다. docker container start f5029f3d8d2c 정상적으로 실행됐는지 다시 확인 root@cicd:~# ..
CentOS 7에 k8s 설치(on-prem) master node / work node 설치방법은 동일하나 init 후 는 약간 다름 작성은 마스터노드 기준으로 하였다. * 맨 아래는 init 시 발생하는 에러에 관한 트러블슈팅 방법 작성 K8S install(master,work node 공통 실행) selinux 종료 setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config swap 기능 off sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab swapoff -a 방화벽 끄기 systemctl disable firewalld systemctl stop firewalld netfi..
k8s를 설치하기 전에 hyper-v를 이용해서 vm을 생성하고 centos7을 설치할 것 쿠버네티스는 보통 1 master node - 2 work node를 사용하기 때문에 mater node 와 work node를 만들어 줄 것이다. CentOS VM 생성 원격연결을 통해 hyper-v로 접속한다. 새로만들기 → 가상컴퓨터 이름 및 위치지정 - 이름: master 세대지정 : 1세대 메모리 설정 : 2GB (최소사양) 네트워크 구성 : internet 가상 하드디스크 연결 : 디스크의 위치를 지정해준다. 디스크 크기 : 30GB OS 설치 옵션 OS를 바로 설치해도 되지만 일단 나중에 설치하기로 하고 스킵한다. 요약 vm 생성 완료 CentOS install 이제 os 파일을 넣어 설치를 해주자. ..
※ 수정 23021: 내용추가 볼륨 마운트 옵션을 이용해 로컬파일 공유하기 권한 ro : 읽기 전용(read only) rw : 읽기 & 쓰기(read & write) nginx로 볼륨마운트 docer run -d -p 80:80 --rm -v /var/www:/usr/share/nginx/html:ro nignx /var/www에 데이터가 없기 때문에 403 forbidden으로 뜬다. 그래서 파일을 하나 생성해준 뒤에 새로고침을 하면 이렇게 뜬다. jupyter lab 볼륨마운트 docker search jypeter 이걸 써줄거다. 그 전에 주피터는 파일이 많으니 디렉토리를 하나 만들어 거기에 몰빵해주도록 한다. mkdir jypeter * 주피터 컨테이너 실행 전에 실행중인 컨테이너들을 전부 삭제..
강의를 듣고 이해한 내용을 바탕으로 정리하였음. 도커(Docker) 컨테이너 기술의 표준 컨테이너 기술을 지원하는 다양한 프로젝트 중 하나(지만 이젠 거의 이것만 쓴다.) 다양한 운영체제에서 사용이 가능함(Mac, win, 리눅스 등) 애플리케이션에 국한되지 않고 의존성 및 파일시스템까지 패키징하여 빌드, 배포, 실행을 단순화함 커널기능 이용 가상화하여 사용 기본 명령어 도커 이미지 검색 docker search [다운받을 이미지 이름] 도커 이미지 다운로드 docker pull [이미지 이름] 그럼 이렇게 다운된다. 다운받은 이미지 확인 docker images 다운받은 이미지 삭제 docker rmi [이미지이름] 그리고 다시 확인하면 아무것도 없는 것을 볼 수 있다.
Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox : open /run/flannel/subnet.env: no such file or directory 해결방법 아 진짜 킹받는ㅠㅠ 대체 이거 며칠째 해결하고 있는거묘ㅠㅠ # 에러코드 확인 kubectl describe pod nx 에러코드 Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "2c33f444a427dff160fdf0f3ad325cbdb6e2117e624599c2d9bfb7180db7c94c..