自分用Kubernetesまとめ1

完全に自分用のKubernetesまとめ。自分の知らないことを書き連ねます。(Kubernetes公式ドキュメントを読んで)Kubernetesとは何か? | Kubernetes

カナリアデプロイ

プロダクトやサービスの新機能を一部ユーザーのみが利用できるようにリリースし、新機能に問題がないことを確認しながら段階的に全体に向けて展開していくデプロイ手法のこと。

f:id:simasimaaquox:20210505191213p:plain

ノード:

  • Kubelet
    クラスター内の各ノードで実行されるエージェント。各コンテナがPodで実行されていることを保証する。
  • kube-proxy
    クラスター内の各nodeで動作しているネットワークプロキシで、KubernetesのServiceコンセプトの一部を実装している。
  • コンテナランタイム
    コンテナの実行を担当するソフトウェア

■アドオン

アドオンはクラスター機能を実装するために、Kubernetesリソースを使用する。アドオンはクラスターレベルの機能を提供しているため、アドオンのリソースで名前空間が必要なものはkube-system名前空間に属する。

DNS

・WebUI

・コンテナリソース監視

クラスターレベルログ

■Initコンテナ

Podないでアプリエーションコンテナの前に実行される特別なコンテナ

二つ以上持つこともできる。

 

■PodPreset

PodPresetは、Podの作成時にそのPodに対して、Secret、Volume、VolumeMountや環境変数など、特定の情報を注入するためのオブジェクトです。

 

エフェメラルコンテナ

トラブルシューティングなどのユーザが開始するアクションを実行するために、すでに存在するPodないで一時的に実行するコンテナ。アプリケーションの構築ではなく、serviceの調査のために利用する。

■ネットワークポリシー

PodのグループがPod相互也ほかのネットワークエンドポイントと通信する場合に許可を与える方法を指定するための仕様

 

Ingress

クラスター外からクラスター内ServiceへのHTTPとHTTPSのルートを公開する。トラフィックのルーティングはIngressリソース上で定義されるルールによって制御される。

 

Dockerfile書式まとめ

Dockerfileのコマンドまとめ

  • FROM
    ベースイメージを指定する
  • ADD
    イメージにファイルやフォルダを追加する。Dockerfileを置いたディレクトリがいのリモートファイルも指定できる。圧縮ファイルを指定したときは自動的に展開される。基本的にはCOPYを使い、圧縮ファイルの展開くらいにしかADDは使用しない。
  • COPY
    イメージにファイルやフォルダを追加する。Dockerfileを置いたディレクトリ内のファイルしか指定できない。圧縮ファイルを指定したときは圧縮ファイルのままコピーされる。
    COPY index.html /usr/local/apache2/htdocs/
  • RUN
    イメージをビルドするときにコマンドを実行する。
    RUN command1 && command2 && command3
  • CMD
    コンテナを起動するときに指定する、最後のコマンドのデフォルト値を変更する。
    CMD /usr/sbin/apachectl -DFOREGROUND
  • ENTORYPOINT
    イメージをビルドするとき(docker createやdorkcer runするとき)のコマンドを強要する。ENTORYPOINTを指定した場合、dokcer runの最後に指定するコマンドは、このENTORYPOINTで指定したコマンドへの引数となる。
  • ONBUILD
    ビルド完了したときに任意の命令を実行する
    ONBUILD COPY コピー元 コピー先
  • ONBUILD RUN コマンド 引数
  • EXPOSE
    通信を想定するポートをイメージの利用者に伝える
  • VOLUME
    永続データが保存される場所をイメージの利用者に伝える
  • ENV
    環境変数を定義する
  • WORKDIR
    RUN、CMD、ENTORYPOINT、ADD、COPYの際の作業ディレクトリを指定する。
    これ以降は特に場所を指定しなくても、WORKDIRで指定した場所でおこなわれる。
  • SHELL
    ビルド時のシェルを指定する
  • LABEL
    名前やバージョン番号、製作者情報などを設定する。
  • USER
    RUN、CMD、ENTORYPOINTで指定するコマンドを実行するユーザやグループを設定する(設定しない場合はルート)
  • ARG
    docker buildする際に指摘できる引数を宣言する
  • STOPSIGNAL
    docker stopする際に、コンテナで実行しているプログラムに対して送信するシグナルを変更する
  • HEALTHCHECK
    コンテナの死活確認をするヘルスチェックの方法をカスタマイズする

 

※CMDやENとRYPOINTはDockerfileに一つしか記述できない。

自分用Dockerまとめ3

■ライブリストア(live restore)

デーモンが利用できない場合に、コンテナを実行し続けるかどうか設定するためのオプション

/etc/docker/daemon.jsonで以下のように追加で有効化

{
  "live-restore": true
}

 ■IPV6有効化

Docker コンテナで IPv6 のサポートが必要であれば、IPv6 ネットワークの作成やコンテナに IPv6 アドレスを割り当てる前に、 Docker デーモンで 有効化するオプション と、その設定の再読込が必要です。

ネットワークの作成時、 IPv6 を有効化するには --ipv6 フラグを使います。

デフォルトのbridgeネットワークについてはIPv6のサポートを無効化できない。

 

■Dockerコンテナから外の世界への転送を有効化

  1. Linux カーネルが IP フォワーディングを有効化する設定にします。
    $ sysctl net.ipv4.conf.all.forwarding=1
  2. iptables に対するポリシーを変更します。 FORWARD``ポリシーを ``DROP から ACCEPT にします。
    $ sudo iptables -P FORWARD ACCEPT

■オーバレイ・ネットワーク

複数のDockerデーモンんおホスト館に分散ネットワークを作成する。このネットワークはホスト固有のネットワークの上に(オーバレイ:覆い被さるように)位置します。

オーバレイ・ネットワークの使用 — Docker-docs-ja 19.03 ドキュメント

 

Docker-ComposeでWordPress環境

DockerでWordPressを実行するまでの手順

■Docker-Composeのインストール

pythonのインストール

sudo apt install -y python3 python3-pip

sudo pip3 install docker-compose

■Docker-ComposeでWordPressを起動

  1. Dockerネットワークを作成する
    docker network create wordpressnet
  2. ボリュームの作成
    docker volume create wordpress_db_volume
  3. mysql コンテナを起動する
  4. wordpressコンテナを起動する

の作業が必要になるのですが、docker-composeで自動でおこないます。

docker-compose.yaml

version"3"
services:
  wordpress-db:
    imagemysql:5.7
    networks:
      - wordpressnet
    volumes:
      - wordpress_db_volume:/var/lib/mysql
    restartalways
    environment
      MYSQL_ROOT_PASSWORDmyrootpassword
      MYSQL_DATABASEwordpressdb
      MYSQL_USERwordpressuser
      MYSQL_PASSWORDwordpresspass

  wordpress-app:
    depends_on
      - wordpress-db
    imagewordpress
    networks
      - wordpressnet
    ports:
      - 8080:80
    restartalways
    environment
      WORDPRESS_DB_HOSTwordpress-db
      WORDPRESS_DB_NAMEwordpressdb
      WORDPRESS_DB_USERwordpressuser
      WORDPRESS_DB_PASSWORDwordpresspass
networks:
  wordpressnet:
volumes:
  wordpress_db_volume:

 

Ubuntuのサーバに入って、

ls -ltr /$home/wordpress

rw-rw-r-- 1 ubuntu ubuntu 727 May 3 18:33 docker-compose.yml

という状態にします。

cd /$home/wordpress

 docker-compose up -d

これだけでwordpressが立ち上がります。

http://サーバのパブリックIP>:8080/でアクセスできます。

f:id:simasimaaquox:20210504033936p:plain



docker-compose ps

Name Command State Ports
---------------------------------------------------------------------------------------------------------
wordpress_wordpress-app_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp,:::8080->80/tcp
wordpress_wordpress-db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp

 

コンテナ名は

作業用ディレクトリ名_コンテナ名_1

という命名規則にする。

 

■Docker-Composeの注意点

1.サービス

全体を構成する一つのコンテナのこと。

2.ネットワーク

ネットワークを指定しなかった場合、記述しているサービス(コンテナ)がつながる新しいDockerネットワークを自動的に作成し、すべてのサービスをそのネットワークに接続するように構成する。

3コンテナに入るとき

コンテナに入るときにはdocker-compose exec wordpress-app /bin/bash

というようにできる。この際、-itはいらず、デフォルトで機能する。

 

 

 

LinuxにDockerをインストールする

AWSでDockerのインストールされたサーバを作成するまで

AWSサーバの作成

AWSUbuntu のサーバを立てます。t2.microで十分です。

ストレージはDockerを使用する場合は20G程度あったほうがいいため20Gに設定します。

■セキュリティグループの編集

f:id:simasimaaquox:20210504001954p:plain

デフォルトではsshを受け付けるようになっています。

そこに

・HTTP

HTTPS

・カスタムTCPで使用するポート番号を追加

で準備完了。

Teratermなどのソフトを使って、サーバにログインします。

 

■Dockerのインストール

Ubuntuのパッケージをアップデート

sudo apt-get update

・必要なパッケージのインストール

sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

・DockerのオフィシャルGPGキーをダウンロード、登録する。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

>>ok

・Dockerダウンロードサイトをaptリポジトリに追加する

Dockerの公式サイトからDockerEngineをダウンロードできるようaptリポジトリに追加する。

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

・DockerEngineをインストールする

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

ubuntuユーザでdockerを利用できるようにする

sudo gpasswd -a ubuntu docker

・Dockerの確認

Exitしサーバに入り直し、バージョンを確認する

docker --version

>>Docker version 20.10.6

 

 ここまででDockerのインストールが完了しました!!