knative yaml으로 설치하기

생성일
Mar 13, 2022 09:30 AM
태그
 

Kantive Serving 구성요소 설치

# 구성요소 설치
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.2.0/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.2.0/serving-core.yaml
 

네트워크 계층 설치

# Kourier 설치
kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.2.0/kourier.yaml

kubectl patch configmap/config-network \
  --namespace knative-serving \
  --type merge \
  --patch '{"data":{"ingress.class":"kourier.ingress.networking.knative.dev"}}'

kubectl --namespace kourier-system get service kourier
Istio가 더 유명한 것 같은데 안내서에서 Kourier를 권장하길래 이걸로 설치했어요.
 

DNS 구성

# magic DNS (sslip.io)
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.2.0/serving-default-domain.yaml
http://helloworld-nodejs.default.1.2.3.4.sslip.io
위 주소와 같은 DNS를 열어주는 역할 같은데 자세히는 잘 모르겠네요.
 
 
 

테스트 배포

공식예제의 hello-world 서버를 배포해보겠습니다.
 
code
서버
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Hello world received a request.');

  const target = process.env.TARGET || 'World';
  res.send(`Hello ${target}!\n`);
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log('Hello world listening on port', port);
});
 
도커
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim

# Create and change to the app directory.
WORKDIR /usr/src/app

# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./

# Install production dependencies.
RUN npm install --only=production

# Copy local code to the container image.
COPY . ./

# Run the web service on container startup.
CMD [ "npm", "start" ]
 
쿠버네티스 yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-nodejs
  namespace: default
spec:
  template:
    spec:
      containers:
        - image: docker.io/younhu6/hello-world-node
          env:
            - name: TARGET
              value: "Node.js Sample v1"
 
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-nodejs
  namespace: default
spec:
  template:
    spec:
      containers:
        - image: docker.io/younhu6/hello:0.4
          env:
            - name: TARGET
              value: "Node.js Sample v1"
 
hello-world 를 출력하는 서버의 이미지를 도커에 업로드했습니다. (younhu6/hello-world-node)
 
kubectl apply -f service.yaml
위 명령어로 쿠버네티스에 서비스를 생성합니다.
서비스가 생성되면 knative는 다음 단계를 수행합니다.
  • 앱에 대한 변경 불가능한 버전을 만든다.
  • 앱에 대한 경로, 수신, 서비스 및 부하 분산을 생성하기 위한 네트워크 프로그래밍.
  • 파드를 자동으로 확장 및 축소한다.
 
kubectl get ksvc 명령어로 생성된 서비스를 확인합니다.
notion image
 
 
배포 확인
notion image
 
 
 
notion image
 
vultr의 도쿄리전인데 응답시간이 100ms 아래로도 나오네요

Loading Comments...