쿠베르네트스 깊이 들어가기(두 번째 부분):

로컬 환경에서 k8s를 설정하려면:


컴퓨터에서 단일 노드인 Kubernetes 그룹을 실행하기 때문에 미니쿠버를 설치합니다.
설치:$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb $ sudo dpkg -i minikube_latest_amd64.deb
  • 미니쿠버를 설치할 때kubectl도 설치합니다.별도로 설치할 필요가 없습니다.
  • 미니쿠버 클러스터 시작
  • $ minikube startkubectl 명령을 사용할 수 있습니다.$ kubectl get pods기다리다

    Kubernetes 서비스:


    Kubernetes 서비스란:


  • 서비스는 Kubernetes 그룹에 추상적인 층을 제공하기 때문에 저희 프로그램은 직접 공개하지 않습니다.
  • 서비스를 사용하면 응용 프로그램이 안전하고 정의된 서비스로 접근할 수 있습니다.
  • 우리는 서비스로 정적 IP 주소를 사용할 수 있다.

  • 서비스 유형(예:

  • 클러스터 서비스:
    기본 서비스 유형입니다.클러스터 내부 IP에 서비스를 공개합니다.들어오는 요청은 브라우저에서 왔습니다. 입구를 통해 서비스가 집단 내에서만 접근할 수 있도록 합니다.
  • 노드 포트 서비스:
    정적 포트에 각 노드의 클러스터 IP 를 공개합니다.우리는 외부에서 nodeport 서비스로 연락할 수 있다.
  • 로드 밸런서 서비스:
    부하 균형기는 전송된 요청 루트를 그룹으로 이동할 수 있습니다.
  • 헤드 없는 서비스:
    상태 적용을 위해 설계되었습니다.만약에 MongoDB 데이터베이스가 주종 구조에서 실행되고 주종 구조에서 쓰기 작업을 한다면 데이터베이스에서 주 데이터베이스와 동기화해야 한다.
  • 그런데 당신의 k8s 서비스는 루트 요청의 집단을 어떻게 알 수 있습니까?
    답은 선택기를 통해 전송 요청을 알 수 있다는 것이다.
  • 손 위치:

  • Nginx 배포 파일의 예:
  • apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2 # tells deployment to run 2 pods matching the template
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
    
    그런 다음 kubectl apply 명령을 각 파일 이름과 함께 사용합니다.$ kubectl apply -f nginx-depl.yaml $ kubectl get pods

    시작:


    따라서 요청은 브라우저에서 온 다음에 몬고 익스프레스 응용 프로그램의 외부 서비스에 들어가서 몬고 DB의 내부 서비스에 전송하고 몬고 DBpod에 전송하며 후자는 증거를 사용하여 이를 인증한다.
  • Minikube 클러스터가 실행 중인지 확인합니다.
  • $minikube start
  • mongo express의 배치 파일을 만듭니다.
  • $ touch mongo-depl.yml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mongodb-dep
      labels:
        app: mongodb
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mongodb
      template:
        metadata:
          labels:
            app: mongodb
        spec:
          containers:
          - name: mongodb
            image: mongo
    
  • 현재 DockerHub (용기 이미지를 저장하는 데 사용되는 공공 저장소입니다. GitHub와 유사) 의 Mongo 이미지를 검사하여 설정, 포트, 환경 변수를 가져옵니다.
  • 배포 파일의 이미지를 배치한 후에 이러한 환경 변수와 포트를 배포 파일에 추가해야 합니다.
  • ports :
            - containerport : 27017
            env:
            - name: MONGO_INITDB_ROOT_USERNAME
              value :
            - name : MONGO_INITDB_ROOT_PASSWORD
              value :
    
  • 루트 사용자 이름과 비밀번호가 있는 비밀을 만듭니다.
  • $ touch mongo-secret.yml
    apiVersion: v1
    kind: Secret
    metadata:
      name: mongodb-secret
    type: Opaque
    data:
        mongo-root-username: dXNlcm5hbWU=
        mongo-root-password: cGFzcw==
    
    사용자 이름과 암호는 base64 인코딩이어야 합니다.$ echo -n 'admin' | base64 $ echo -n 'password' | base64지금 우리는 배치 파일에서 그것을 인용해야 한다$ kubectl apply -f mongo-secret.yml
  • 현재 루트 사용자 이름과 비밀번호가 생겨서secret에서 인용할 수 있습니다.
  • env:
            - name : MONGO_INITDB_ROOT_USERNAME
              valueFrom:
                secretKeyRef:
                  name: mongo-secret
                  key : mongo-root-username 
            - name : MONGO_INITDB_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mongo-secret
                  key : mongo-root-password
    
    $ kubectl apply -f mongo-depl.yaml $ kubectl gel pod
  • 현재 우리는 다른 아나운서나 용기가MongoDB와 대화할 수 있도록 내부 서비스를 만들어야 한다.
  • ---
    apiVersion : v1
    kind: Service
    metadata:
      name: mongodb-service
    spec:
      selector:
        app: mongodb
      ports:
      - protocol: TCP
        port: 27017
        targetPort: 27017 
    
    선택기 - 태그를 통해pod에 연결
    포트 - 서비스 포트
    목표 항구-컨테이너 항구$ kubectl apply -f mongo-depl.yaml $ kubectl get service $ kubectl describe service (service name) $ kubectl get pod -o wide
  • 이제 Mongo express 배치와 서비스, 그리고 설정 맵을 만들어야 합니다.
  • 다음과 같은 구성이 필요합니다.
  • MongoDB URL
  • 관리자 이름
  • 암호
  • apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mongo-express
      labels:
        app: mongo-express
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mongo-express
      template:
        metadata:
          labels:
            app: mongo-express
        spec:
          containers:
          - name: mongo-express
            image: mongo-express
            ports:
            - containerPort: 8081
            env:
            - name : ME_CONFIG_MONGODB_ADMINUSERNAME
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key : mongo-root-username 
            - name: ME_CONFIG_MONGODB_ADMINPASSWORD
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key : mongo-root-password
            - name: ME_CONFIG_MONGODB_SERVER 
              valueFrom:
                configMapKeyRef:
                  name: mongodb-configmap
                  key : database_url
    

    구성 매핑:

  • 외부 구성
  • 중앙 집중식
  • 다른 부품에서도 사용 가능
  • apiVersion: v1
    kind : ConfigMap
    metadata:
      name: mongodb-configmap
    data:
      database_url: mongodb-service
    
    키 값 쌍 및 데이터베이스 URL
    창조의 순서가 중요합니다.$ kubectl apply -f mongo-config.yaml $ kubectl apply -f mongo-express.yaml $ kubectl get pod $ kubectl logs mongo-express-(some number)
    you can see 
    server is running
    

    마지막:

  • LoadBalator 유형 (외부 부하 평형기)
  • 의mongo express 서비스를 만듭니다.
  • 노드 포트, 외부 IP 주소는 개방적이며 실제 범위는 30000-32767
  • mongo express 서비스(외부 서비스도 일부 externa IP를 획득)
  • apiVersion : v1  
    kind : Service
    metadata:
      name: mongo-express-service
    spec:
      selector :
        app: mongo-express
      type : LoadBalancer 
      ports:
      - protocol: TCP
        port: 8081
        targetport: 8081
        nodePort : 30000
    
    $ kubectl get service $ minikube service mongo-express-service

    이제 응용 프로그램 대시보드를 볼 수 있습니다.


    참을성 있게 읽어 주셔서 감사합니다🔥🔥🔥

    좋은 웹페이지 즐겨찾기