Upgrade to Pro — share decks privately, control downloads, hide ads and more …

初めてKubernetesクラスタを作る人のためのkubeadm入門/kubeadm for ...

heriet
October 28, 2020

初めてKubernetesクラスタを作る人のためのkubeadm入門/kubeadm for Novices

Kubernetesクラスタの構築は数多くの方法が存在しますが、その中でも公式のツールであるkubeadmの使い方について解説します。書籍「解体kubeadm」でも解説したkubeadmの使い方とその動作を知ることで、標準的なKubernetesクラスタ構築の仕組みを理解することができます。

heriet

October 28, 2020
Tweet

More Decks by heriet

Other Decks in Technology

Transcript

  1. 製品紹介: ニフクラ Hatoba(β) ▶ 法⼈向けパブリッククラウド「ニフクラ」のKubernetes as a Service (KaaS) •

    βのうちは審査に通れば無料で使えます(本番利⽤は⾮推奨)  IUUQTQGTOJGDMPVEDPNTFSWJDFIBUPCBIUN
  2. ⼤雑把に2つの役割で理解するKubernetesクラスタ ▶ コンテナをいい感じに管理できるらしい • これはコントロールプレーンの役割 • マスターとも呼ばれていた ▶ なんかコンテナが動くらしい •

    これはノード(ワーカーノード)の役割 • コンテナ≒アプリと思ってもらって良い  ίϯτϩʔϧϓϨʔϯ ϊʔυ ϊʔυ ϊʔυ ͍͍ײ͡ʹ؅ཧ ,VCFSOFUFTΫϥελ ίϯςφ ίϯςφ ίϯςφ ίϯςφ ίϯςφ ίϯςφ
  3. Kubernetesの中⼼はKubernetes API ▶ Kubernetes API(kube-api-server)が各コンポーネントと通信する ▶ それぞれHTTPSのクライアント認証(mTLS)でセキュアに通信 • つまり証明書が必要 

    ,VCFSOFUFT"1* ʢLVCFBQJTFSWFSʣ LVCFTDIFEVMFS LVCFDPOUSPMMFS NBOBHFS )5514SFRVFTU )5514SFRVFTU LVCFMFU )5514SFRVFTU LVCFDUM ,VCFSOFUFTར༻ऀ )5514SFRVFTU
  4. Kubernetes APIのストレージはetcd ▶ etcdは分散KVS(Key Value Store) ▶ KubernetesのオブジェクトはすべてKubernetes API経由でetcdに永続化 

    ,VCFSOFUFT"1* ʢLVCFBQJTFSWFSʣ FUDE FUDE FUDE TUPSF BQJ7FSTJPOW LJOE1PE NFUBEBUB OBNFXFC TQFD DPOUBJOFST OBNFXFC JNBHFOHJOY QPSUT OBNFXFC DPOUBJOFS1PSU QSPUPDPM5$1
  5. Kubernetesクラスター内のネットワークはCNIが司る ▶ Kubernetesクラスター内では独⾃のネットワークで通信が⾏われる • Podに独⾃のネットワークのIPアドレスが振られ、ホストのように扱える ▶ その独⾃ネットワークを管理するのがCNIで様々な実装がある (Calico, Cilium, Weave

    Net など)  ࢀߟɿʮ$POUBJOFS/FUXPSL*OUFSGBDFʹ͍ͭͯௐ΂ͨʯIUUQTOUPPGVHJUIVCJPCMPHQPTUDPOUBJOFSOFUXPSLJOUFSGBDF ίϯςφ 1PE ίϯςφ 1PE ίϯςφ 1PE $/*ʹΑΔ,VCFSOFUFTωοτϫʔΫ 192.168.0.0/16 192.168.0.3 ίϯςφ 192.168.0.2 192.168.0.1
  6. Kubernetesクラスタを作るためには… ▶ Kubernetesに必要な各コンポーネントを適切にインストールする必要がある • ⼀つ⼀つ理解してインストールするのは結構⼤変  /usr/local/bin/kube-controller-manager \\ --bind-address=0.0.0.0 \\

    --cluster-cidr=10.200.0.0/16 \\ --cluster-name=kubernetes \\ --cluster-signing-cert-file=/var/lib/kubernetes/ca.pem \\ --cluster-signing-key-file=/var/lib/kubernetes/ca-key.pem \\ --kubeconfig=/var/lib/kubernetes/kube-controller-manager.kubeconfig \\ --leader-elect=true \\ --root-ca-file=/var/lib/kubernetes/ca.pem \\ --service-account-private-key-file=/var/lib/kubernetes/service-account- key.pem \\ --service-cluster-ip-range=10.32.0.0/24 \\ --use-service-account-credentials=true \\ --v=2 kube-apiserver \\ --advertise-address=${INTERNAL_IP} \\ --allow-privileged=true \\ --apiserver-count=3 \\ --audit-log-maxage=30 \\ --audit-log-maxbackup=3 \\ --audit-log-maxsize=100 \\ --audit-log-path=/var/log/audit.log \\ --authorization-mode=Node,RBAC \\ --bind-address=0.0.0.0 \\ --client-ca-file=/var/lib/kubernetes/ca.pem \\ --enable-admission- plugins=NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultS torageClass,ResourceQuota \\ --etcd-cafile=/var/lib/kubernetes/ca.pem \\ --etcd-certfile=/var/lib/kubernetes/kubernetes.pem \\ --etcd-keyfile=/var/lib/kubernetes/kubernetes-key.pem \\ --etcd-servers=https://10.240.0.10:2379,https://10.240.0.11:2379,https:// 10.240.0.12:2379 \\ --event-ttl=1h \\ --encryption-provider-config=/var/lib/kubernetes/encryption-config.yaml \\ --kubelet-certificate-authority=/var/lib/kubernetes/ca.pem \\ --kubelet-client-certificate=/var/lib/kubernetes/kubernetes.pem \\ --kubelet-client-key=/var/lib/kubernetes/kubernetes-key.pem \\ --kubelet-https=true \\ --runtime-config='api/all=true' \\ --service-account-key-file=/var/lib/kubernetes/service-account.pem \\ --service-cluster-ip-range=10.32.0.0/24 \\ --service-node-port-range=30000-32767 \\ --tls-cert-file=/var/lib/kubernetes/kubernetes.pem \\
  7. kubeadmとは ▶ 公式のKubernetesクラスタ構築・運⽤ツール ▶ Kubernetes + administration でkubeadm(たぶん) • 英語圏ではキューブエーディーエム

    と発⾳されている • わたしは⾃社内で会話するときはクベアダムって発⾳します(発⾳しにくいので…) ▶ 他のツールの内部処理としても使われることを想定 • たとえばCluster API / kubespray / minikube 等の内部で使われている ▶ Kubernetes 1.13(2018/12)でGA 
  8. kubeadmのコアデザインプリンシプル ▶ Secure / セキュア • ベストプラクティスとなるセキュアな構成が構築できる ▶ Easy to

    use / 簡単に使える • ほんの数コマンドでKubernetesクラスタが構築できる ▶ Extendable / 拡張可能 • 設定ファイルで様々なKubernetesクラスタが構築できる  IUUQTLVCFSOFUFTJPEPDTSFGFSFODFTFUVQUPPMTLVCFBENJNQMFNFOUBUJPOEFUBJMTDPSFEFTJHOQSJODJQMFT ৄࡉ͸ެࣜαΠτΛಡ΋͏ʂ
  9. kubeadmのスコープ  Machine kube-apiserver kube-scheduler kube-controller-manager FUDE kubelet (※最初のインストールのみ利⽤者が実施) Control

    Plane kube-proxy CoreDNS CNI Addon Any Kubernetes Resources kubeadmで 構築・運⽤ 利⽤者が作成 利⽤者が作成 Container Runtime ※kubeadmの世界ではetcdはControl Planeに含まれないので注意(通常はetcdも含まれる事が多い)
  10. kubeadmのサブコマンド⼀覧  サブコマンド 説明 kubeadm init 最初のマスターノードの作成 kubeadm join 2台⽬以降のマスターノードまたはワーカーノードの追加

    kubeadm upgrade Kubernetesバージョンのアップグレード kubeadm reset kubeadmで構築したコンポーネントの初期化 kubeadm config kubeadmのコンフィグ周りの処理つめあわせ kubeadm token kubeadmのブートストラップトークン周りの処理つめあわせ kubeadm version kubeadmのバージョン表⽰ kubeadm alpha 開発中のalpha機能つめあわせ ˞ଠࣈ͸௨ৗΑ͔ͭ͘͏Ͱ͋Ζ͏ίϚϯυ
  11. kubeadmによるシングルコントロールプレーンなクラスターの作成例 ▶ 事前に各ノードでkubeadmのインストールと各種準備 • https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ ▶ ① コントロールプレーンノードで kubeadm init

    ▶ ② CNIをインストール ▶ ③ ワーカーノードでkubeadm join  IUUQTLVCFSOFUFTJPEPDTTFUVQQSPEVDUJPOFOWJSPONFOUUPPMTLVCFBENDSFBUFDMVTUFSLVCFBEN # kubeadm init # kubectl apply -f <cni.yaml> # kubeadm join
  12. kubeadmで構築したKubernetesクラスタ  ίϯτϩʔϧϓϨʔϯ ϊʔυ LVCFBEN LVCFMFU ূ໌ॻ LVCFQSPYZ LVCFBEN LVCFMFU

    ূ໌ॻ DPSFEOT LVCFDPOUSPMMFSNBOBHFS LVCFTDIFEVMFS LVCFBQJTFSWFS LVCFQSPYZ ,VCFSOFUFTΫϥελ ͕LVCFBENͰߏஙͯ͘͠ΕΔίϯϙʔωϯτ FUDE
  13. kubeadmによるマルチコントロールプレーンクラスターの作成例  IUUQTLVCFSOFUFTJPEPDTTFUVQQSPEVDUJPOFOWJSPONFOUUPPMTLVCFBENIJHIBWBJMBCJMJUZ ▶ 事前に各ノードでkubeadmのインストールと各種準備 ▶ ① ロードバランサーを作成 ▶ ②

    最初のコントロールプレーンノードで  kubeadm init ▶ ③ CNIをインストール ▶ ④ 2台⽬以降のコントロールプレーンノードで   kubeadm join ▶ ⑤ ワーカーノードでkubeadm join
  14. もっと詳しい話 ▶ Kubernetes Meetup Tokyo #34 で更に内部的な話をしたのでそちらもどうぞ • https://www.youtube.com/watch?v=2AbDqZsMTxA •

    https://speakerdeck.com/heriet/phases-of-kubeadm-and-kubernetes-cluster-internal ▶ 書籍「解体kubeadm」もよければ