概要
k8sを一つのEC2(オンプレ)に構築する場合(会社の開発環境構築など)
- 例) Aさんは
dev1.xxx、Bさんはdev2.xxxを利用してください
簡単手順
-
golang、Dockerとk8sをダウンロードし、手順に沿ってインストールすること-
cri-dockerdをインストールすること - ダウンロード直後にノードが
NotReadyとk8sの状況でDNSが動作されてないのでCalicoをインストールすること -
kubeadmを初期化する段階で--cri-socket=unix:///var/run/cri-dockerd.sockのオプションが必要になる
-
-
nginx-ingressをダウンロードする、設定を行う -
nginx-ingressをダウンロードしたときに、nginx-ingress-controllerのEXTERNAL-IPはpending状況になるNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer X.X.X.X <pending> 80:X/TCP,443:X/TCP 4h59m -
metallbをダウンロードする、MetallbのLayer2の設定を行う - 設定するときに、昔のバージョンは、IPアドレスの設定をConfigMapですると記載されているが、バージョンアップで変わったので新しく対応する必要ある
- layer2モードのため、
IPAddressPoolを作成し、適応するlayer2Conf.yamlapiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - X.X.X.1-X.X.X.2 # こちらのIPアドレスはプライベートIPアドレスの範囲を設定すること - 上記を設定するようになると、EC2に
セカンダリプライベート IPv4 アドレスを追加する必要がある(ひとつずつ追加する) - 上記のIPの設定を行うと、
EXTERNAL-IPが表示される - EC2のユーザを作成(
sudo useradd -G wheel <username>)し、作成したユーザに交換すること(下記の手順からは各自のユーザから対応です) - 上記で作成したユーザでKubeConfigを適応すること
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config - ユーザの権限や設定(Namespaceなど)を各自で設定すること
-
Deployment、Serviceを作成する(k8s公式ホームページを参考) -
Ingressを作成する、HostとALBと連結する- Ingressのホスト欄はRoute53で設定する値と合わせること
この段階で、
Aさんはdev1.xxx、Bさんはdev2.xxxを利用してくださいなどの要件に対応できます - ALBのターゲットグループは
IPを指定EXTERNAL-IPを設定すること - EC2のユーザ作成し、
Ingressのところを人によって変える - Route53や、ACMの設定もアスタ(*)を活用すること
ALBの設定で、HTTPポートで入った場合、HTTPSでリダイレクトする
HTTPS://#{host}:443/#{path}?#{query}
参考にした記事
各自のNsを設定できるようにするKrew
追記
- calicoインストール手順として
Taintを削除することkubectl taint nodes --all node-role.kubernetes.io/control-plane- kubectl taint nodes --all node-role.kubernetes.io/master- - ingress 適応するときに、うまくできてない場合、ログを確認すること
kubectl logs ingress-nginx-controller-xxxxx-xxxxx -n ingress-nginx - golang最新版をインストールすると、ダメみたい