kind (Kubernetes in Docker)를 PXE 부팅 한 Fedora CoreOS에서

인프라의 설정도 서버측에 설정을 거듭하는 것이 아니라,
예를 들어 Kubernetes의 작업자 노드는 처음부터 설정, 응용 프로그램도 다시 배포하는 것으로 imutable 구성으로 할 수 없거나, 또한 작업자 노드는 CoreOS 사용할 수 있으면 간단한 구성으로 할 수 없는지,라고 검증하고 있습니다 (도상)

그리고 재기동하는 것만으로 깨끗한 Docker 환경으로서 사용할 수 있는 수수함에 편리할지도.

이번은 간편하게 Kubernetes를 검증하는 목적으로, ( 이전 이쪽의 내용으로 만든 PXE 부트 환경에서 ) 1대의 CoreOS를 PXE 부트해, kind 셋업,
마스터와 워커 노드를 1대의 서버에 혼재하는 형태로 kubernetes의 검증 환경을 만들어 보았습니다.



시작 흐름





Kubernetes in Docker (kind) 설정



CoreOS를 시작하는 데 필요한 ignition 파일을 만듭니다.

HDD 마운트



처음, imutable, 서버측에 설정을 가지지 않는 구성이라면 모두 온메모리로 동작할 수 있는 것은?라고 생각했습니다만,
집 서버의 메모리가 4GB 밖에 없고, Docker 이미지의 사이즈가 부족해, tmpfs의 영역이 가득 차 버렸다...
이 때문에 어쩔 수 없이 HDD를 마운트하고 있습니다.

마운트 방법에는 두 가지가 있습니다.
1. CoreOS ignition filesystems에서 수행하는 방법
2. systemd mount를 사용하는 방법
근처가있을 것 같고,

이번에는 systemd mount를 사용했습니다.
HDD 볼륨을 초기화하는 경우 ignition의 filesystems의 wipe_filesystem 등과 조합하면 편리해
(이번 HDD는 검증과는 별도로 스토리지의 백업 용도로도 사용하고 있어 지울 수 없었기 때문에 systemd의 mound, bind로 마운트하고 있습니다)

그러나 systemd에서의 마운트, /var/mnt 에 마운트하는 경우, 유닛명은 var-mnt.mount 로 해야 합니다.

마운트는 docker가 시작되기 전에 이루어져야 합니다. 그래서 systemd의 유닛의 기동 순서를 아래와 같이 했습니다.
  • HDD를/var/mnt에 마운트
  • (내 환경에서는 HDD에 다른 데이터가 혼합되어 있기 때문에)/var/mnt/docker를/var/lib/docker에 마운트
  • docker 서비스 시작

  • kind 설정



    2 개소에서 설정하고 있습니다.
    1. 파일의 설치는 ignition 파일내의 storage.files 로 실시한다
    2. CLI에서 실행하고 싶은 내용은, 일단, bash 스크립트로 기술 storage.files 로 설치한 다음, systemd.units 내에서 실행하도록 했습니다.

    2에서 처음에는 systemd.units 내에 직접 스크립트를 작성했습니다.
    (ExecStart=에서의 처리를 점점 계속해서 백슬래시로 개행해 나가는 형태)
    다만 이 경우, 커멘드 치환이 어려울 것 같았기 때문에, 다른 파일에 잘라내기로 했습니다.

    생성 된 ingnition 파일



    시도하면 이니셔티브에 의한 설정이 contents: |,
          contents: |
            [Unit]
              いろんな処理
    

    으로 ignition내에 여러가지 쓸 수 있으므로, 전망하기 쉬울지도.
    variant: fcos
    version: 1.0.0
    passwd:
      users:
        - name: core
          groups:
            - adm
            - sudo
          ssh_authorized_keys:
            - ssh-rsa AAhimituv [email protected]
    systemd:
      units:
        - name: var-mnt.mount
          enabled: true
          contents: |
            [Unit]
            Description=disk mount
    
            [Mount]
            What=/dev/backup/export
            Where=/var/mnt
            Type=xfs
            Options=defaults
    
            [Install]
            WantedBy = multi-user.target
        - name: var-lib-docker.mount
          enabled: true
          contents: |
            [Unit]
            Description=symbolick link for docker strage
            After=var-mnt.mount
            RequiresMountsFor=/var/mnt
            Before=docker.service
    
            [Mount]
            What=/var/mnt/docker
            Where=/var/lib/docker
            Type=none
            Options=bind
    
            [Install]
            WantedBy=multi-user.target
        - name: shell.service
          enabled: true
          contents: |
            [Unit]
            Description=Alpine CLI Shell
            After=NetworkManager-wait-online.service
    
            [Service]
            Type=simple
            ExecStart=/usr/bin/podman run --rm --privileged -v /:/host -ti alpine:latest /bin/ash
    
            [Install]
            WantedBy=multi-user.target
        - name: kubernetes_setup.service
          enabled: true
          contents: |
            [Unit]
            Description=kubernetes setup
            After=network.target var-mnt.mount
    
            [Service]
            Type=oneshot
            WorkingDirectory=/var/home/core
            ExecStart=/var/home/core/kind_setup.bash
    
            [Install]
            WantedBy=multi-user.target
    
    storage:
      files:
        - path: /var/home/core/kind.conf
          mode: 0644
          contents:
            inline: |
              kind: Cluster
              apiVersion: kind.x-k8s.io/v1alpha4
              nodes:
              - role: control-plane
              - role: worker
        - path: /usr/local/bin/kind
          mode: 0755
          contents:
            source: https://kind.sigs.k8s.io/dl/v0.7.0/kind-Linux-amd64
        - path: /etc/sysctl.d/k8s.conf
          mode: 0644
          contents:
          mode: 0644
          contents:
            inline: |
              net.bridge.bridge-nf-call-iptables  = 1
              net.ipv4.ip_forward                 = 1
              net.bridge.bridge-nf-call-ip6tables = 1
        - path: /var/home/core/kind_setup.bash
          mode: 0744
          contents:
            inline: |
              #!/bin/bash
    
              sudo systemctl enable docker.service
              # 一般ユーザでもdockerを操作できるように
              sudo usermod -a -G docker core
              # kubectl のダウンロード
              version=`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`
              curl -LO https://storage.googleapis.com/kubernetes-release/release/${version}/bin/linux/amd64/kubectl
              mv ./kubectl /usr/local/bin/
              chmod 755 /usr/local/bin/kubectl
              # kind でクラスターを作成
              kind create cluster --config /var/home/core/kind.conf
              # 初回起動時は ~/.kube をrootの所有権で作成するので、coreユーザに変更
              chown -R core:core /var/home/core/.kube
    

    좋은 웹페이지 즐겨찾기