여러 오픈소스를 공부할 때 Docker Desktop for Windows에서 제공하는 kubernetes를 애용한다.
docker container만으로도 충분히 쓸만하지만 계속 container가 초기화되어 데이터가 유지되지 않거나 또는 매번 window 구동 시 container를 일일이 띄우는 게 귀찮거나 하는 잡다한 문제들이 있다.
환경 구성 설정을 관리하여 이런 문제들을 해결해 나갈 수 있지만 container가 많아질 수록 그 container를 계속 유지하는 게 귀찮아지게 된다.
이런 문제를 편하게 해결 할 수 있는 게 kubernetes인데 예전에는 minikube를 사용할 수 있었지만 그것도 설치하는 게 너무 귀찮고 복잡했다.
하지만 요즘은 Window Docker Desktop이 kubernetes를 지원하면서 간단하게 kubernetes를 사용할 수 있게 되었다.
관련하여 사용하는 Window Docker Desktop kubernetes 설정 yaml들을 모아두었다.
image에 따라 window directory 볼륨 연결을 사용할 수 없거나 시간이 지나면 지원이 안되기도 하지만 되도록 볼륨 연결을 통해 데이터는 유지하는 식으로 사용하고 있다.
사용 방법은 다음과 같다.
- Docker Desktop 설정 -> Kubernetes에서 Enable Kubernetes를 활성화
- Docker Desktop 설정 -> Resources -> FILE SHARING에서 공유할 폴더를 지정하고 아래의 설정들의 공유 폴더 위치를 적절히 수정
- command 창에서 아래 파일의 위치에서 kubectl apply -f [각 yaml파일] 명령을 수행하여 kubernetes pod 생성
아래 예제 중 jenkins의 경우 jenkins 내에서 docker를 사용하기 위해 기존 jenkins image를 가져와 window docker와 연결하여 새로 image를 만드는 형태이다.
jenkins의 경우만 아래와 같이 docker image를 빌드하는 명령을 선행 수행한 후 해당 image로 kubernetes pod를 사용한다.
docker pull jenkins/jenkins:jdk11
docker build -f jenkins-Dockerfile --tag luversof/jenkins .
kubectl apply -f jenkins.yaml
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: elasticsearch-deployment | |
labels: | |
app: elasticsearch | |
spec: | |
replicas: 1 | |
selector: | |
matchLabels: | |
app: elasticsearch | |
template: | |
metadata: | |
labels: | |
app: elasticsearch | |
spec: | |
containers: | |
- name: elasticsearch | |
image: elasticsearch:8.4.3 | |
env: | |
- name: discovery.type | |
value: "single-node" | |
ports: | |
- containerPort: 9200 | |
- containerPort: 9300 | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: elasticsearch-service | |
spec: | |
selector: | |
app: elasticsearch | |
ports: | |
- protocol: TCP | |
name: kibana-port | |
port: 9200 | |
targetPort: 9200 | |
- protocol: TCP | |
name: kibana-port2 | |
port: 9300 | |
targetPort: 9300 | |
type: LoadBalancer |
FROM jenkins/jenkins:jdk11 | |
MAINTAINER bluesky <luversof@hanmail.net> | |
USER root | |
RUN curl -fsSL https://get.docker.com -o get-docker.sh \ | |
&& sh get-docker.sh | |
RUN usermod -aG docker jenkins | |
USER jenkins |
docker pull jenkins/jenkins:jdk11 | |
docker build -f jenkins-Dockerfile --tag luversof/jenkins . | |
kubectl delete pods -l app=jenkins |
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: jenkins-deployment | |
labels: | |
app: jenkins | |
spec: | |
replicas: 1 | |
selector: | |
matchLabels: | |
app: jenkins | |
template: | |
metadata: | |
labels: | |
app: jenkins | |
spec: | |
containers: | |
- name: jenkins | |
image: luversof/jenkins:latest | |
imagePullPolicy: Never | |
ports: | |
- containerPort: 8080 | |
- containerPort: 50000 | |
env: | |
- name: JAVA_OPTS | |
value: "-Duser.timezone=Asia/Seoul" | |
volumeMounts: | |
- name: jenkins-docker-sock | |
mountPath: /var/run/docker.sock | |
# - name: jenkins-docker | |
# mountPath: /root/.docker | |
- name: jenkins-home | |
mountPath: /var/jenkins_home | |
- name: jenkins-m2 | |
mountPath: /root/.m2 | |
# 절대 권장하지 않는 방식임 | |
securityContext: | |
privileged: true | |
# allowPrivilegeEscalation: false | |
runAsUser: 0 | |
volumes: | |
- name: jenkins-docker-sock | |
hostPath: | |
path: /var/run/docker.sock | |
# - name: jenkins-docker | |
# hostPath: | |
# path: /mnt/c/data/jenkins-docker | |
- name: jenkins-home | |
hostPath: | |
# path: /mnt/c/data/jenkins-home | |
path: /mnt/f/dev/data/jenkins-home | |
- name: jenkins-m2 | |
hostPath: | |
# path: /mnt/c/data/jenkins-m2 | |
path: /mnt/f/dev/data/jenkins-m2 | |
# imagePullSecrets: | |
# - name: bluesky-secret | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: jenkins-service | |
spec: | |
selector: | |
app: jenkins | |
ports: | |
- protocol: TCP | |
name: jenkins-port | |
port: 8080 | |
targetPort: 8080 | |
- protocol: TCP | |
name: jenkins-slave-agent-port | |
port: 50000 | |
targetPort: 50000 | |
type: LoadBalancer |
# https://www.magalix.com/blog/kafka-on-kubernetes-and-deploying-best-practice | |
kind: Deployment | |
apiVersion: apps/v1 | |
metadata: | |
name: zookeeper-deploy | |
spec: | |
replicas: 1 | |
selector: | |
matchLabels: | |
app: zookeeper-1 | |
template: | |
metadata: | |
labels: | |
app: zookeeper-1 | |
spec: | |
containers: | |
- name: zoo1 | |
image: digitalwonderland/zookeeper | |
ports: | |
- containerPort: 2181 | |
env: | |
- name: ZOOKEEPER_ID | |
value: "1" | |
- name: ZOOKEEPER_SERVER_1 | |
value: zoo1 | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: zoo1 | |
labels: | |
app: zookeeper-1 | |
spec: | |
ports: | |
- name: client | |
port: 2181 | |
protocol: TCP | |
- name: follower | |
port: 2888 | |
protocol: TCP | |
- name: leader | |
port: 3888 | |
protocol: TCP | |
selector: | |
app: zookeeper-1 | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: kafka-service | |
labels: | |
name: kafka | |
spec: | |
ports: | |
- port: 9092 | |
name: kafka-port | |
protocol: TCP | |
selector: | |
app: kafka | |
id: "0" | |
type: LoadBalancer | |
--- | |
kind: Deployment | |
apiVersion: apps/v1 | |
metadata: | |
name: kafka-broker0 | |
spec: | |
replicas: 1 | |
selector: | |
matchLabels: | |
app: kafka | |
id: "0" | |
template: | |
metadata: | |
labels: | |
app: kafka | |
id: "0" | |
spec: | |
containers: | |
- name: kafka | |
image: wurstmeister/kafka | |
ports: | |
- containerPort: 9092 | |
env: | |
- name: KAFKA_ADVERTISED_PORT | |
value: "9092" | |
- name: KAFKA_ADVERTISED_HOST_NAME | |
value: 127.0.0.1 | |
- name: KAFKA_ZOOKEEPER_CONNECT | |
value: zoo1:2181 | |
- name: KAFKA_BROKER_ID | |
value: "0" | |
- name: KAFKA_CREATE_TOPICS | |
value: admintome-test:1:1 |
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: kibana-deployment | |
labels: | |
app: kibana | |
spec: | |
replicas: 1 | |
selector: | |
matchLabels: | |
app: kibana | |
template: | |
metadata: | |
labels: | |
app: kibana | |
spec: | |
containers: | |
- name: kibana | |
image: kibana:8.4.3 | |
ports: | |
- containerPort: 5601 | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: kibana-service | |
spec: | |
selector: | |
app: kibana | |
ports: | |
- protocol: TCP | |
name: kibana-port | |
port: 5601 | |
targetPort: 5601 | |
type: LoadBalancer |
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: sonarqube-deployment | |
labels: | |
app: sonarqube | |
spec: | |
replicas: 1 | |
selector: | |
matchLabels: | |
app: sonarqube | |
template: | |
metadata: | |
labels: | |
app: sonarqube | |
spec: | |
containers: | |
- name: sonarqube | |
image: sonarqube | |
ports: | |
- containerPort: 9000 | |
env: | |
- name: SONAR_JDBC_URL | |
value: "jdbc:sqlserver://mssql-service;databaseName=sonarqube;encrypt=false" | |
- name: SONAR_JDBC_USERNAME | |
value: "sa" | |
- name: SONAR_JDBC_PASSWORD | |
value: "testPassword!" | |
volumeMounts: | |
- name: sonarqube-data | |
mountPath: /opt/sonarqube/data | |
- name: sonarqube-extensions | |
mountPath: /opt/sonarqube/extensions | |
- name: sonarqube-logs | |
mountPath: /opt/sonarqube/logs | |
volumes: | |
- name: sonarqube-data | |
hostPath: | |
path: /mnt/f/dev/data/sonarqube-data | |
- name: sonarqube-extensions | |
hostPath: | |
path: /mnt/f/dev/data/sonarqube-extensions | |
- name: sonarqube-logs | |
hostPath: | |
path: /mnt/f/dev/data/sonarqube-logs | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: sonarqube-service | |
spec: | |
selector: | |
app: sonarqube | |
ports: | |
- protocol: TCP | |
name: sonarqube-port | |
port: 9000 | |
targetPort: 9000 | |
type: LoadBalancer |
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: zeppelin-deployment | |
labels: | |
app: zeppelin | |
spec: | |
replicas: 1 | |
selector: | |
matchLabels: | |
app: zeppelin | |
template: | |
metadata: | |
labels: | |
app: zeppelin | |
spec: | |
containers: | |
- name: zeppelin | |
image: apache/zeppelin:0.9.0 | |
ports: | |
- containerPort: 8080 | |
volumeMounts: | |
- name: zeppelin-notebook | |
mountPath: /opt/zeppelin/notebook | |
volumes: | |
- name: zeppelin-notebook | |
hostPath: | |
path: /mnt/f/dev/data/zeppelin-notebook | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: zeppelin-service | |
spec: | |
selector: | |
app: zeppelin | |
ports: | |
- protocol: TCP | |
port: 8085 | |
targetPort: 8080 | |
type: LoadBalancer |
'Study > Docker & Kubernetes' 카테고리의 다른 글
Rancher Desktop에서 docker 명령어 사용하기 (0) | 2022.10.20 |
---|---|
로컬 docker-desktop의 kubernetes (k8s)에 elasticsearch, kibana 설치해보기 (0) | 2022.10.08 |
Window에서 Docker Desktop 없이 docker, kubernetes 사용하기 (Rancher Desktop 사용하기) (0) | 2021.12.01 |
kubernetes kubectl 명령어 모음 (0) | 2021.08.13 |
Dockerfile 명령어 (0) | 2021.07.02 |
Docker Desktop Community 2.3.0.2 이후 Windows 10 Home 지원 시작 (0) | 2020.05.17 |
window docker desktop 2.3.0.2에서 kubernetes volume mount가 되지 않는 현상 (0) | 2020.05.12 |
자주 쓰는 Docker 명령어 (0) | 2020.03.14 |
Docker compose 사용하기 (0) | 2019.08.01 |
Docker network 사용하기 (0) | 2019.07.26 |