오늘은 k3s에 nginx 웹서버를 배포해본다. helm을 이용해 구성해줬다.
kubeconfig 설정
서버에 ssh로 접속해서 kubeconfig를 맥북으로 옮겨뒀다. 매번 서버에 직접 붙어서 작업하는 건 너무 귀찮기 때문이다.
다만 이 경우, server에 설정된 <ip>:<port>에서 IP를 변경해줘야 한다.
default로 127.0.0.1로 되어 있을텐데, 서버의 IP로 변경해줘야 접속이 가능하다.
helm 설치
brew를 이용해 helm을 설치했다.
다음으로 app을 만들어준다.
$ helm create echo-server
지금은 일단 nginx만 서빙할 생각이지만, 추후에는 응답을 되돌려줄 예정이라 이름을 echo-server로 했다.
불필요한 파일과 디렉토리들은 제거했다.
values.yaml
image: repository: nginx tag: latest pullPolicy: IfNotPresent resources: limits: cpu: "0.5" memory: "1Gi" service: port: 80 targetPort: 80
이미지는 nginx이며 최신 이미지를 사용한다.
resource는 우선 수정 없이 두었다.
80포트에서 nginx의 80포트로 연결해준다.
service.yaml
apiVersion: v1 kind: Service metadata: name: {{ .Release.Name }}-echo-server labels: app: {{ .Release.Name }}-echo-server spec: ports: - port: {{ .Values.service.port | default 80 }} targetPort: {{ .Values.service.targetPort | default 80 }} protocol: TCP selector: app: {{ .Release.Name }}-echo-server type: NodePort
service를 추가해줬다.
NodePort로 서비스를 외부에 노출시켰다.
deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }}-echo-server labels: app: {{ .Release.Name }}-echo-server spec: strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 selector: matchLabels: app: {{ .Release.Name }}-echo-server template: metadata: labels: app: {{ .Release.Name }}-echo-server spec: containers: - name: echo-server image: {{ .Values.image.repository }}:{{ .Values.image.tag }} imagePolicy: {{ .Values.image.pullPolicy }} ports: - containerPort: {{ .Values.service.targetPort | default 80 }} resources: limits: cpu: {{ .Values.resources.limits.cpu }} memory: {{ .Values.resources.limits.memory }}
nginx도 80포트를 이용한다.
이제 준비가 되었으니 install을 한다.
$ helm install my-echo-server ./echo-server
k9s에서
:svc
를 쳐서 서비스를 검색한다.30455 포트가 오픈된 것 같다.
서버의 IP:30455로 접속을 시도해본다.
짜잔!
nginx가 응답을 내려주고 있다.
TODO
앞으로 진행될 작업들이다.
- go로 간단한 에코 서버를 만들고, 이미지를 빌드해서 배포할 것이다.
- argoCD와 github action을 이용해 CI/CD를 적용할 것이다.