この記事は3年以上前に書かれた記事で内容が古い可能性があります
Kubernetes超入門(Vagrant・CentOS7)〜(2)マスターサーバ設定〜
マスターサーバの設定
Kubernetes超入門(Vagrant・CentOS7)〜(1)環境づくり〜の続き
先ほど作成したマスターサーバ「kubemaster」の設定をしていく
マスターサーバにログイン
% vagrant ssh kubemaster Last login: Mon Oct 14 06:29:15 2019 from 10.0.2.2 [vagrant@localhost ~]$ [vagrant@localhost ~]$ sudo su [root@localhost vagrant]#
必要なものをインストール
ざっくりしか理解していないが
etcdは設定情報を複数サーバで共有するもの
flannelはサーバ間のネットワーク通信を可能にするもの
# yum -y install etcd kubernetes flannel
インストールできているか確認
# yum list installed | grep -e etcd -e kubernetes -e flannel Failed to set locale, defaulting to C etcd.x86_64 3.3.11-2.el7.centos @extras flannel.x86_64 0.7.1-4.el7 @extras kubernetes.x86_64 1.5.2-0.7.git269f928.el7 @extras kubernetes-client.x86_64 1.5.2-0.7.git269f928.el7 @extras kubernetes-master.x86_64 1.5.2-0.7.git269f928.el7 @extras kubernetes-node.x86_64 1.5.2-0.7.git269f928.el7 @extras
etcdの設定
etcdの設定をする
設定ファイルは「/etc/etcd/etcd.conf」
「ETCD_LISTEN_CLIENT_URLS」の値を変更する
# cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf.backup # vi /etc/etcd/etcd.conf # diff /etc/etcd/etcd.conf /etc/etcd/etcd.conf.backup 6c6 < ETCD_LISTEN_CLIENT_URLS="http://192.168.33.10:2379,http://localhost:2379" --- > ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
設定できたので、etcdサービスを起動する
# systemctl start etcd
flannelの設定
flannelの設定をしていく
ノード間のネットワーク設定をするということ
「/etc/sysconfig/flanneld」の「FLANNEL_ETCD_PREFIX」の値を確認しておく
# cat /etc/sysconfig/flanneld # Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379" # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="/atomic.io/network" # Any additional options that you want to pass #FLANNEL_OPTIONS=""
先ほど確認した「/atomic.io/network」のkeyを設定しにいく
# etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}' {"Network":"172.17.0.0/16"}
設定されたか確認
# etcdctl ls /coreos.com /atomic.io # etcdctl get /atomic.io/network/config {"Network":"172.17.0.0/16"}
設定できたのでflannelを起動
# systemctl start flanneld
kubernetesの設定
一旦「/etc/kubernetes/」配下の設定ファイルを確認する
# ls /etc/kubernetes/ apiserver config controller-manager kubelet proxy scheduler
「apiserver」は、文字通りapiを提供しているサービス。Kubernetesを操作するために必要なサービス
「controller-manager」は、コントローラたちを管理するサービス。コントローラはリソースがうまいこと使われるように管理するもの、とざっくり理解
「kubelet」はpodの状態を管理するサービス。マスターサーバでは使わないので今回は起動しない
「proxy」はノードのルーティングを管理するサービス
「scheduler」は、podをどのノードで起動するかなどを決めるサービス
ここでやることは
鍵を作成して「apiserver」「controller-manager」「config」に鍵の場所に付いて設定を追加すること
まずは鍵の作成
# openssl genrsa -out /etc/kubernetes/serviceaccount.key 2048
「/etc/kubernetes/apiserver」の設定変更
「KUBE_API_ADDRESS」「KUBE_API_ARGS」に設定追加
# cp /etc/kubernetes/apiserver /etc/kubernetes/apiserver.backup # vi /etc/kubernetes/apiserver # diff /etc/kubernetes/apiserver /etc/kubernetes/apiserver.backup 8c8 < KUBE_API_ADDRESS="--insecure-bind-address=192.168.33.10" --- > KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1" 26c26 < KUBE_API_ARGS="--service_account_key_file=/etc/kubernetes/serviceaccount.key" --- > KUBE_API_ARGS=""
「/etc/kubernetes/controller-manager」の設定変更
「KUBE_CONTROLLER_MANAGER_ARGS」に設定追加
# cp /etc/kubernetes/controller-manager /etc/kubernetes/controller-manager.backup # vi /etc/kubernetes/controller-manager # diff /etc/kubernetes/controller-manager /etc/kubernetes/controller-manager.backup 7c7 < KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/etc/kubernetes/serviceaccount.key" --- > KUBE_CONTROLLER_MANAGER_ARGS=""
「/etc/kubernetes/config」の設定変更
「KUBE_MASTER」に設定追加
# cp /etc/kubernetes/config /etc/kubernetes/config.backup # vi /etc/kubernetes/config # diff /etc/kubernetes/config /etc/kubernetes/config.backup 22c22 < KUBE_MASTER="--master=http://192.168.33.10:8080" --- > KUBE_MASTER="--master=http://127.0.0.1:8080"
設定ができたので起動していく
# systemctl start kube-apiserver # systemctl start kube-controller-manager # systemctl start kube-scheduler # systemctl start kube-proxy
kubectlの設定
「kubectl」はkubernetesを操作するためのコマンドツール
これが先ほど起動した「kube-apiserver」経由でapiを叩きにいく
コマンドを打つユーザーや場所で設定をする
必ずしもマスターサーバでなくても良いが、今回はマスターサーバで設定する
ユーザーはvagrantユーザーで設定してみる
※環境に合わせて設定ください
まずはvagrantユーザーに移動
[root@localhost vagrant]# exit exit [vagrant@localhost ~]$ [vagrant@localhost ~]$ whoami vagrant [vagrant@localhost ~]$
設定していく
$ kubectl config set-credentials myself --username=admin --password=vagrant User "myself" set. $ kubectl config set-cluster local-server --server=http://192.168.33.10:8080 Cluster "local-server" set. $ kubectl config set-context default-context --cluster=local-server --user=myself Context "default-context" set. $ kubectl config use-context default-context Switched to context "default-context". $ kubectl config set contexts.default-context.namespace default Property "contexts.default-context.namespace" set.
kubectlコマンドが打てるか確認
$ kubectl cluster-info Kubernetes master is running at http://192.168.33.10:8080 To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
うまくいった
SSL/TLS証明書の設定
いまいちなぜ必要か理解していないが、
ここでSSL/TLS証明書の設定が必要らしいので淡々と設定していく
$ sudo mkdir -p /etc/kubernetes/ca $ cd /etc/kubernetes/ca
独自証明書作成(「ca.key」「ca.crt」)
$ sudo openssl genrsa -out ca.key 2048 $ sudo openssl req -x509 -new -nodes -key ca.key -subj "/CN=192.168.33.10 " -days 10000 -out ca.crt
サーバー鍵作成(「server.key」)
$ sudo openssl genrsa -out server.key 2048
KubernetesサービスIPアドレス確認
$ kubectl get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.254.0.1 <none> 443/TCP 15m
csr.confファイル作成(新規作成)
$ sudo vi csr.conf $ cat csr.conf [ req ] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [ dn ] C = JP ST = dummy L = dummy O = dummy OU = dummy CN = 192.168.33.10 [ req_ext ] subjectAltName = @alt_names [ alt_names ] DNS.1 = kubernetes DNS.2 = kubernetes.default DNS.3 = kubernetes.default.svc DNS.4 = kubernetes.default.svc.cluster DNS.5 = kubernetes.default.svc.cluster.local IP.1 = 192.168.33.10 IP.2 = 10.254.0.1 [ v3_ext ] authorityKeyIdentifier=keyid,issuer:always basicConstraints=CA:FALSE keyUsage=keyEncipherment,dataEncipherment extendedKeyUsage=serverAuth,clientAuth subjectAltName=@alt_names
サーバー証明書の署名リクエストファイルを作成(「server.csr」)
$ sudo openssl req -new -key server.key -out server.csr -config csr.conf
サーバー証明書を作成(「server.csr」)
$ sudo openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000 -extensions v3_ext -extfile csr.conf Signature ok subject=/C=JP/ST=dummy/L=dummy/O=dummy/OU=dummy/CN=192.168.33.10 Getting CA Private Key
証明書が作成できたので、
「apiserver」「controller-manager」の設定ファイルに場所を教えてあげる
「/etc/kubernetes/apiserver」の「KUBE_API_ARGS」を変更
※「KUBE_API_ADDRESS」は変更済み
$ sudo vi /etc/kubernetes/apiserver $ diff /etc/kubernetes/apiserver /etc/kubernetes/apiserver.backup 8c8 < KUBE_API_ADDRESS="--insecure-bind-address=192.168.33.10" --- > KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1" 26,29c26 < KUBE_API_ARGS="--client-ca-file=/etc/kubernetes/ca/ca.crt \ < --tls-cert-file=/etc/kubernetes/ca/server.crt \ < --tls-private-key-file=/etc/kubernetes/ca/server.key \ < --service-account-key-file=/etc/kubernetes/serviceaccount.key" --- > KUBE_API_ARGS=""
「/etc/kubernetes/controller-manager」の「KUBE_CONTROLLER_MANAGER_ARGS」を変更
$ sudo vi /etc/kubernetes/controller-manager $ diff /etc/kubernetes/controller-manager /etc/kubernetes/controller-manager.backup 7,9c7 < KUBE_CONTROLLER_MANAGER_ARGS="--service-account-private-key-file=/etc/kubernetes/serviceaccount.key \ < --root-ca-file=/etc/kubernetes/ca/ca.crt \ < --cluster-signing-cert-file=/etc/kubernetes/ca/ca.crt" --- > KUBE_CONTROLLER_MANAGER_ARGS=""
マスターサーバの設定はここまで
次はコンテナ稼働ノードの設定をするので、マスターサーバからログアウトしておく
$ exit logout Connection to 127.0.0.1 closed.