OpenShift Enterprise 3 on Microsoft Azure - RHELインストール編 -
準備するもの
準備
1.Cloud Accessの登録
(1)azureのサブスクリプションの確認
(2)Red Hat Cloud Accessのエンロールを開始
http://www.redhat.com/en/technologies/cloud-computing/cloud-access にアクセスして、Cloud Access の登録をします。 画面左下の "ENROLL" をクリックします。
(3)登録
CloudProviderとMicrosoftSubscriptionNumberを入力します。
|Name|Value| |---|---| |CloudProvicer|Microsoft Azure| |MicrosoftSubscriptionNumber|(3)で確認したazureのサブスクリプション番号| |ProductName|azureで利用するRed Hatのサブスクリプションを選択| |Quantity|導入するサブスクリプションの本数を入力|
(4)登録完了
VDH イメージ
Linux VHD の作成とアップロード | Microsoft Azure に従って、アップロードするイメージの作成。
Kickstartを使いたかったのですが、Hyper-V Manager の使い方がわからないので断念。
(1)KVMイメージをダウンロード
https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.2/x86_64/product-software から、KVM イメージをダウンロードします。
(2)qcow2からvdhの変換
Linux VHD の作成とアップロード | Microsoft Azure に従って guestfish で、root パスワードをchangemeに変更後、VDHへ変換。
virt-install で KVM イメージをインポート
sudo virt-install \ --connect qemu:///system \ --ram 1024 -n rhel_72_azure -r 2048 \ --os-type=linux \ --os-variant=rhel5 \ --disk path=/home/komizo/azure/rhel-guest-image-7.2-20151102.0.x86_64.qcow2,device=disk,bus=virtio,format=qcow2 \ --vcpus=2 \ --vnc \ --noautoconsole \ --import
virsh で仮想OSの起動
virsh -c qemu:///system console rhel_72_azure
Azure CLIのイストール
Azure SDK とツールのダウンロード | Azure からAzure CLI ツールをダウンロード
RHELのVM作成
(1)VDHイメージのアップロード
Linux VHD の作成とアップロード | Microsoft Azure の手順2に従って、イメージをアップロード
azure vm image create rhel-7.2 --location "Japan East" --os Linux rhel-guest-image-7.2-20151102.0.x86_64.vhd
1回目は container がないとエラーになるので、もう一度やったら出来ているっぽい。
azure vm image list
で一覧を表示すると、rhel-7.2 が表示されます。WebUIでは表示されないっぽい。
$ azure vm image list |grep rhel-7.2 data: rhel-7.2 User Linux undefined
(2)仮想OSの作成
azure vm create <仮想マシン名>.cloudapp.net rhel-7.2 --vm-size "Medium" guest --location "Japan East" info: Executing command vm create + Looking up image rhel-7.2 Enter VM 'guest' password:******** ← @Dmin123 Confirm password: ******** + Looking up cloud service info: cloud service <仮想マシン名> not found. + Creating cloud service + Creating VM info: vm create command OK
ここで、location か affinity-group の指定が必要なので、azure vm location list
か azure account affinity-group list
で確認します。
(3) SSH の有効化
仮想OS起動したのに、SSHできないーと悩んでいたら、SSHのエンドポイントがありませんでした。自分で追加する必要があります。
Webコンソールで「仮想マシン(クラッシック) > [仮想サーバ名] > 設定 > エンドポイント」を指定し、エンドポイントに SSH ようの 22 番ポートを指定。
(4)追加ユーザの作成
Webコンソールで「仮想マシン(クラッシック) > [仮想サーバ名] > 設定 > ユーザ」を指定し、ユーザと認証方式を設定します。
(5)ログイン
パスワード認証にした場合は、ユーザと仮想マシンを指定して ssh を実行します。
ssh -l <ユーザ名> <仮想マシン名>.cloudapp.net>
参考
1.Linux VHD の作成とアップロード | Microsoft Azure 2.Create and upload a Linux VHD | Microsoft Azure 3.Use the Azure CLI with Service Management | Microsoft Azure 4.Use SSH on Linux and Mac | Microsoft Azure
Optimizing Twelve-Factor Apps for OpenShift by Red Hat
原文 : Optimizing Twelve-Factor Apps for OpenShift by Red Hat - Red Hat Customer Portal
OpenShift Enterprise by Red Hat は、アプリケーションアーキテクチャ非依存な PaaS 基盤です。さらに、ステートフルな旧来型のアプリケーションも実行することができます。OpenShift Enterpriseは、モダンでステートレスな Twelve-Factor Apps も実行することができます。この文書では、Twelve-Factor Apps のアーキテクチャの最適化とOpenShift Enterprise へのデプロイの方法を紹介します。
Note: Twelve-Factor App は、モダンなクラウド環境にアプリケーションを構築するためのメソドロジーです。詳細は http://12factor.net/ja/ を参照してください。
Factor | Relationship |
---|---|
Codebase - コードベース | バージョン管理されている1つのコードベースと複数のデプロイ。OpenShift Enterpriseは、ソースコードリポジトリからソースコードを取得してアプリケーションのビルドとデプロイが可能。 |
Dependencies - 依存関係 | 依存関係を明示的に宣言し分離。OpenShift Enterprisは、プログラミング言語ごとの依存関係の管理システムの利用が可能。Maven、Java、CPANやその他にも多数のプログラミング言語の依存関係管理システムをサポート。 |
Config - 設定 | 設定を環境変数に格納する。OpenShift Enterpriseは、複数の環境変数の設定方法を提供。 |
Baking Service - バックエンドサービス | バックエンドサービスをアタッチされたリソースとして扱う。OpenShift Enterpriseでは、多数のバックエンドサービスを提供いしている(データベース、メッセージブローカなど)。さらに、外部リソースをアタッチすることも可能。 |
Build, release, run - ビルド、リリース、実行 | ビルド、リリース、実行の3つのステージを厳密に分離する。OpenShift Enterpriseは、厳密にビルド、リリース、実行のステージのコードベースを分離し、サードパーティのデプロイツール統合し、継続的インテグレーション/継続的デリバリ(CI/CD)が可能。 |
Processes - プロセス | アプリケーションを1つもしくは複数のステートレスなプロセスとして実行。OpenShift Enterpriseな、デプロイ可能な単位としてDockerコンテナをネイティブにサポート。Dockerコンテナはステートレスでポータブル。 |
Port binding - ポートバインディング | ポートバインディングを通してサービスを公開。OpenShift Enterpriseは、アプリケーションをポートバインディングによって公開し、サービスを公開可能。サービスな OpenShift 内部での利用も、バックエンドサービスとして外部に公開することも可能。 |
Concurrency - 並行性 | プロセスモデルによってスケールアウト。OpenShift Enterpriseは、手動/自動でアプリケーションをスケールアウトが可能で、真のウェブスケールのアプリケーションのデプロイが可能。 |
Disposability - 廃棄容易性 | 高速な軌道とグレースフルシャットダウンで堅牢性を最大化。コンテナの起動と停止。OpenShift Enterpriseはコンテナを利用し、堅牢なツールの仕組みを活用して、迅速な起動とグレースフルシャットダウンが可能。 |
Dev/prod parity - 開発/本番一致 | 開発、ステージング、本番環境をできるだけ一致させた状態を保つ。OpenShift Enterpriseの中の”環境”は名称が異なるだけ。唯一の本番環境か100ステップの本番環境かに関わらず、インフラもアプリケーションアーキテクチャも変更なし |
Logs - ログ | ログをイベントストリームとして扱う。OpenShift Enterpriseは、アプリケーション開発者が特別な操作をすることなしに、すべてのインスタンスのアプリケーションログデータを集約可能。 |
Admin process - 管理プロセス | 管理タスクを1回限りのプロセスとして実行。OpenShift Enterpriseはデプロイ前後のフックを実行する昨日を提供する。また、同様にcronのようなタスクを”管理/運用タスク”として実行可能。 |
Red Hat は、Twelve-Factor Apps には上記以外にも特徴があると考えている。
Characterristics | Relationship |
---|---|
Microservices - マイクロサービス | 業務として意味のある単位または、ビジネスの価値を提供することができる最小単位でのソフトウェアのビルド方式 |
Self Service Full Stack Infrastructure | OpenShiftは、セルフサービスでアプリケーションの実行環境の取得を可能にする。OS、コンテナ、ストレージ、ネットワーク、ミドルウェア、ソースコード管理/ビルド/デプロイツール |
Support your choice of deployment | OpenShiftは、物理サーバ・仮想サーバ、プライベートクラウド・パブリッククラウドなど、お好きな環境に構築可能! |
Enterprise Ready Containers | OpenShiftで採用しているDockerコンテナは、単に root ユーザ以外でコンテンを実行するだけではなく、SELinuxによってセキュリティを担保。さらに Red Hat は、Docker社以外でDockerの開発に最も貢献している。Red Hat Enterprise Linux が Docker の最適な実行環境となることを目標としている。 |
Immutable Infrastructure | OpenShift は、テストされたアプリケーションのバージョンを本番環境にデプロイできるような機能を提供。この機能により、コードベースのトレーサビリティが向上し、環境の違いによる障害を減らすことが可能。 |
API-Based Collaboration | 複数のサービスやアプリケーションを跨る連携は、公開されバージョン付けられたAPIを通じて利用。Red Hatは、サービスやアプリケーションを WebService、REST、JMSやその他のプロトコルやフォーマットを利用して連携するプロダクトを提供。→JBoss Fuse、JBoss AMQ |
Test Driven Development | Red Hatは、OpenShift/Kubernetesに配備されたアプリケーションをテストするためのMavenのプラグイン(fabric8-arquillian)を提供。fabric8-arquillianは、OpenShift/KubernetesのDockerのクラスタ環境で利用するためのArquillianの拡張。OpenShift/Kubernetesにデプロイされた環境のテストで利用可能。 |
Community Based Innovation | OpenShiftは、Kubernetes、Dockerなどのオープンソースのプロジェクトを活用。これらのプロジェクトへの有力な貢献者でありかつ、これらのプロジェクトの利用者でもある。Red Hatは、より良いソフトウェア開発を牽引している。 |
Continuous Integration and Continuous Deployment | OpenShiftは、CI/CDを実現可能とする Jenkins の Docker イメージを提供。 |
備忘録:OpenShift 3.1のインストール
Mac側の準備
毎回、DNSMasq を仮想環境に設定するのは手間なので、ホストOSであるMacでDNSMasqを動かして、/etc/resolver にファイルを配置することでホストOSのネットワーク環境の変化の影響を受けなくなって、かなり快適です。
Dnsmasq のインストール
http://qiita.com/ono_matope/items/cd3be40b5179731d4460
起動と停止
sudo launchctl start homebrew.mxcl.dnsmasq sudo launchctl stop homebrew.mxcl.dnsmasq
設定ファイル
/usr/local/etc/dnsmasq.conf
address=/apps.ose31/192.168.31.11
resolverの設定
/etc/resolver にdnsmasqで名前解決させたいドメイン名でファイルを作成 ex. apps.ose31 を解決したい場合は、 /etc/resolver/apps.ose31 を作成
nameserver 127.0.0.1
OS の準備
Box イメージのサイズ拡張
ディスクの拡張
VBoxManage clonehd "vagrant-virtualbox-box.vmdk" "cloned.vdi" --format vdi VBoxManage modifyhd "cloned.vdi" --resize 20480 VBoxManage clonehd "cloned.vdi" "resized.vmdk" --format vmdk
ボリュームの拡張
参考にしたサイトhttp://qiita.com/nouphet/items/fea026c03ca86ec54111 *lvdisplay, pvdisplay でストレージ確認 -fdisk でパーティション追加
# fdisk /dev/sda3 # n 新たに領域を作成する n # p 領域テーブルを表示する p # 領域番号 (1-4): 1 # 最初 シリンダ (1-1827, default 1): Enter # 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-1827, default 1827): Enter # t 領域のシステム ID を変更する t # 16進数コード (L コマンドでコードリスト表示): 8e # p 領域テーブルを表示する p # w テーブルをディスクに書き込み、終了する w
ボリューム作成
pvcreate /dev/sda4 vgextend VolGroup00 /dev/sda4 lvextend -L +20Gb /dev/VolGroup00/LogVol00 resize2fs /dev/VolGroup00/LogVol00
OpenShiftのインストール
クイックインストールの場合、インストールを実行するユーザのホームディレクトリ配下に設定ファイル(~/.config/openshift/installer.cfg.yml)を配置して、インストールを開始します。
atomic-openshift-installer -u install
アンインストールは
atomic-openshift-installer -u uninstall
備忘録:Cisco UCS セットアップ
RHEL がインストールできるようになるまで
RHEL7.1 から 7.2 へのアップグレード
yum upgrade redhat-release
KVM のインストール
yum install qemu-kvm qemu-img yum install virt-manager
Vagrant インストール
この辺を参考にインストールhttps://github.com/pradels/vagrant-libvirt
wget https://releases.hashicorp.com/vagrant/1.7.4/vagrant_1.7.4_x86_64.rpm rpm -i vagrant_1.7.4_x86_64.rpm vagrant -v vagrant plugin install vagrant-libvirt yum install libxslt-devel libxml2-devel libvirt-devel libguestfs-tools-c
- vagrantup で起動しなかったので、ld のリンクを修正
alternatives --set ld /usr/bin/ld.gold
- 色々設定
groupadd libvirt usermod -aG libvirt <user> vi /etc/libvirt/libvirtd.conf # Enable following lines to skip auth unix_sock_group = "libvirt" unix_sock_ro_perms = "0777" auth_unix_ro = "none" auth_unix_rw = "none" systemctl enable libvirtd && systemctl start libvirtd
Box イメージのダウンロード
Red Hat のカスタマーポータルで配布している box イメージをゲット https://access.redhat.com/downloads/content/293/ver=2/rhel---7/2.0.0/x86_64/product-downloads
nginx でリバプロ
この辺りを参考に、見よう見まねで設定。 https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-with-ssl-as-a-reverse-proxy-for-jenkins
証明書作成
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt
設定
/etc/nginx/conf.d/default.cfg を編集
server { listen 8443; server_name master.m1n2.cloud; ssl_certificate /etc/nginx/cert.crt; ssl_certificate_key /etc/nginx/cert.key; ssl on; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; access_log /var/log/nginx/master.m1n2.cloud.access.log; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Fix the “It appears that your reverse proxy set up is broken" error. proxy_pass https://192.168.1.100:8443; proxy_read_timeout 90; proxy_redirect http:/// https://; } }
OpenShift v3 のLDAP認証
OpenShiftの設定はマニュアルに書いてありありますが、そもそもLDAPサーバの証明書の準備などなど少し手間取ったので、メモです。
LDAPサーバの準備
インストール
これらのページを参照
- http://linux-hacking-guide.blogspot.jp/2015/04/ldap-authentication-server-in-rhel7.html
- http://www.certdepot.net/rhel7-configure-ldap-directory-service-user-connection/
確認
参照サイト(2)の方法で、/etc/passwd からユーザを移行している場合は、以下のコマンドで確認できます。
ldapsearch -x cn=ldapuser01 -b dc=example,dc=com
curl "ldap://client.cloud:389/dc=example,dc=com?cn?sub?uid=ldap*" -u "cn=Manager,dc=example,dc=com" Enter host password for user 'cn=Manager,dc=example,dc=com’:redhat DN: uid=ldapuser01,ou=People,dc=example,dc=com cn: ldapuser01 password=user01ldap DN: uid=ldapuser02,ou=People,dc=example,dc=com cn: ldapuser02 password=user02ldap
TLSの利用設定とオレオレ証明書発行
証明書の発行
参照サイト (1) の以下の手順で証明書を発行します。
10) Create Server Certificate. Follow the following steps:
10.1) Create a local Certificate Authority (CA).
[root@oserver1 ~]# /etc/pki/tls/misc/CA -newca
ここで設定するホスト名は、LDAPサーバのホスト名にしました。
10.2) Create public-private key pair
[root@oserver1 ~]# openssl genrsa -out ldapserver.key
10.3) Create a certificate signing request (CSR)
[root@oserver1 ~]# openssl req -new -key ldapserver.key -out ldapserver.csr
10.4) Sign the certificate with the local CA.
[root@oserver1 ~]# openssl ca -in ldapserver.csr -out ldapserver.crt
10.5) Copy the files 'ldapserver.key' and 'ldapserver.crt' to the dir. '/etc/openldap/certs/'
10.6) We have to copy the CA cert file '/etc/pki/CA/cacert.pem' to the dir '/etc/openldap/cacerts/' on every client machine.
10.7)Create a file 'cert.ldif' with the following entries.
dn: cn=config changetype: modify replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/certs/ldapserver.crt dn: cn=config changetype: modify replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/certs/ldapserver.key
10.8) Make entry
[root@oserver1 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f cert.ldif
追加設定
※ここは私の勘違いがありそうな予感。。。
TLSCACerfiticationを有効にするため、/etc/openldap/slapd.d/cn=config.ldif
にolcTLSCACertificateFile: /etc/openldap/cacerts/cacert.pem
の記述を追加します。
すでに、olcTLSCACertificateFileの定義がある場合は、次のldifを使って更新します。
dn: cn=config changetype: modify replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/openldap/cacerts/cacert.pem
ldaps の有効化
/etc/sysconfig/slapd
を編集してSLAPD_URLS
を変更します。
#SLAPD_URLS="ldapi:/// ldap:///" SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"
トラブルシューティング
データベースの更新エラー
色々と悪銭苦闘していると、証明書を発行し直したり。で、そんなこんなでopenssl ca
実行時にエラーが発生。
failed to update database TXT_DB error number 2
古い証明書を無効にする必要があります。
openssl ca -revoke /etc/pki/CA/newcerts/00.pem
revoke
もできない場合は、`/etc/pki/CA/index.txt を編集します。
cp -p /etc/pki/CA/index.txt{,.old} : > /etc/pki/CA/index.txt
動作確認
# openssl s_client -connect client.cloud:636 -CAfile my-ldap-ca-bundle.crt CONNECTED(00000003) depth=1 C = XX, ST = Default State, O = Default Company Ltd, OU = Default Organization, CN = client.cloud verify return:1 depth=0 C = XX, ST = Default State, O = Default Company Ltd, OU = Default Organization, CN = client.cloud verify return:1 --- Certificate chain 0 s:/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud i:/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud 1 s:/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud i:/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud --- Server certificate -----BEGIN CERTIFICATE----- MIIDbDCCAlSgAwIBAgIJANs2X7OV8HUkMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV BAYTAlhYMRYwFAYDVQQIDA1EZWZhdWx0IFN0YXRlMRwwGgYDVQQKDBNEZWZhdWx0 IENvbXBhbnkgTHRkMR0wGwYDVQQLDBREZWZhdWx0IE9yZ2FuaXphdGlvbjEVMBMG A1UEAwwMY2xpZW50LmNsb3VkMB4XDTE1MTAwNzIxNDQyNFoXDTE2MTAwNjIxNDQy NFoweTELMAkGA1UEBhMCWFgxFjAUBgNVBAgMDURlZmF1bHQgU3RhdGUxHDAaBgNV BAoME0RlZmF1bHQgQ29tcGFueSBMdGQxHTAbBgNVBAsMFERlZmF1bHQgT3JnYW5p emF0aW9uMRUwEwYDVQQDDAxjbGllbnQuY2xvdWQwgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBAMOUaNe/BY4cj6Q5eFZvfsKMnLCKXP6Ui6MVA4D5FuxoU7lSfUm5 VIvcxsxJNWGExPC9ZpDK0Yulpr3+FXbRhcwcZb6N5/F2UldamC4mscZT1AsfwRZJ zMN+14HGV0lfAGkaA/ctbgOw41rd0oyy+VGODRAUMFlt6kF7/VFixTITAgMBAAGj ezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVk IENlcnRpZmljYXRlMB0GA1UdDgQWBBSRtt3qakgF9XS09BNnhT8GfT7C6zAfBgNV HSMEGDAWgBShCPFk9kdbkAQoYRxf46abhM6DzTANBgkqhkiG9w0BAQsFAAOCAQEA IVGB3hSQWXzAl2jHP8pHQ/s1qeRQZAKHuCp687CycikhSVgVd/VFA+VLeoTJrL7m ESdfz0L3j+jJtlWTjN9Evs4QJBfqHkIyFlxz+ud0k+2tXdggqV+Cqo1i0hi+u9F1 KZL8BhPJwnN+Z8vEhA0RaWctqbTr2jMJ0ySEHGghmaPEggkZjbJ7TCub4KCwlKVF 12XIAEr4xLx6eOlwFQRmC8TpgGkKLj2HZ/k+7ywlApbv1zJErq3C1fyB9TQNNPEX 0Wdow+uuIQIgCog65YepsVHE4cMikX0uaXZW3tyE6FcD0Y3uaU9+X5pyJ+XGosC4 i46cMdt0xQutdACKdrRteA== -----END CERTIFICATE----- subject=/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud issuer=/C=XX/ST=Default State/O=Default Company Ltd/OU=Default Organization/CN=client.cloud --- No client certificate CA names sent --- SSL handshake has read 2003 bytes and written 439 bytes --- New, TLSv1/SSLv3, Cipher is AES128-GCM-SHA256 Server public key is 1024 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : AES128-GCM-SHA256 Session-ID: 268668D6A0B3813C46718D3502D5F028A068BE44F5A9CE23407611499A62D77D Session-ID-ctx: Master-Key: 808949603CFADCDC98FDB435495C3DE5D8A6106FD2214D891142148F5FE5CC546A552F19EF90C45BCBE02E0AAB00AE28 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1444300644 Timeout : 300 (sec) Verify return code: 0 (ok) ---
OpenShiftの認証設定
証明証の配置
LDAPサーバから証明書(/etc/openldap/cacerts/cacert.pem
)を取得して、/etc/openshift/master/my-ldap-ca-bundle.crt
に保存します。
oauthConfig: assetPublicURL: https://master.cloud:8443/console/ grantConfig: method: auto identityProviders: - name: my_ldap_provider challenge: True login: True provider: apiVersion: v1 kind: LDAPPasswordIdentityProvider attributes: id: - dn email: - mail name: - cn preferredUsername: - uid bindDN: "cn=Manager,dc=example,dc=com" bindPassword: "redhat" ca: "my-ldap-ca-bundle.crt" insecure: false url: "ldaps://client.cloud:636/dc=example,dc=com?uid"
なお、CAの認証をしない場合、ca
、insecure
、url
の設定は以下の通りです。
ca: "" insecure: true url: "ldap://client.cloud:389/dc=example,dc=com?uid"
openshift-master を再起動して、LDAP認証の完了です
OpenShift上のコンテナから外部のDBを参照する
外部のMySQLを準備する
簡単に試すため MySQLのコンテナを利用します。
MySQLの実行
sudo docker pull docker.io/mysql sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=mysql -d -p 3306:3306 mysql
3306ポートの開放
sudo iptables -A OUTPUT -p tcp --dport 3306 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
テーブル作成
MySQLのコンテナに入って、データベースとテーブルを作成します。
docker exec -it <CONTAINER_ID> bash mysql -u root -p Enter password: mysql ←mysqlと入力。パスワードなので表示はされない create database mydb; create table hello ( msg varchar(255) ); insert into hello(msg) values('hello opensihft');
これで、データベースは準備完了です。
アプリケーション作成
MySQLを利用するPHPのアプリケーション作成
ここでは、helloテーブルを参照するように変更したdemoブランチを指定します。
oc new-project extdbtest oc new-app https://github.com/akubicharm/hello-php.git#demo
ルーティングの設定
アプリケーションにFQDNでアクセスするために、ルーティングの設定をします。
oc expose service hello-php --hostname=hello-php.extdbtest.apps.cloud
curl hello-php.extdbtest.apps.cloud
コマンドを実行しても、DBにアクセスできないので警告が表示されます。
これで、外部のDBを参照するアプリケーションは準備完了です。
外部のDBを利用する設定
外部のDBを利用するために、サービスとエンドポイントを定義します。
サービス定義
hello-phpアプリケーションから参照するためのhello-php-mysql-serviceサービスを定義します。 ここでmetadataで指定するnameの値がhello-php-mysql-serviceであることが重要です。index.phpからDBサーバ指定する環境変数と合わせておく必要があります。
サービスのホスト名は、[サービス名を大文字にした文字列]_SERVICE_HOST という命名規則になっています。
- index.phpの抜粋
$mysqli = new mysqli(getenv("HELLO_PHP_MYSQL_SERVICE_HOST"), getenv("MYSQL_USER"), getenv("MYSQL_PASSWORD"), getenv("MYSQL_DATABASE"));
{ "kind": "Service", "apiVersion": "v1", "metadata": { "name": "hello-php-mysql" }, "spec": { "ports": [ { "name": "mysql", "protocol": "TCP", "port": 3306, "targetPort": 3306, "nodePort": 0 } ] }, "selector": {} }
サービスを作成します。
oc create -f hello-php-mysql-service.json
エンドポイント定義
hello-php-mysql-serviceサービスのエンドポイント(DBサーバ)を定義します。 subsetsで、DBサーバのIPアドレス、ポート番号を指定します。subsets->portsで定義しているname(ここでは、mysql)は、サービスのspecで定義したnameに合わせます。
{ "kind": "Endpoints", "apiVersion": "v1", "metadata": { "name": "hello-php-mysql" }, "subsets": [ { "addresses": [ { "IP": "192.168.232.101" } ], "ports": [ { "port": 3306, "name": "mysql" } ] } ] }
エンドポイントを作成します。
oc create -f hello-php-mysql-endpoint.json
デプロイメントコンフィグの抽出
deploymentConfig(dc)をJSON形式で抽出します。
oc export dc hello-php -o json > hello-php-dc.json
デプロイメントコンフィグの定義
保存したhello-php-dc.jsonを編集し、hello-phpアプリケーションから利用する環境変数名を定義します(65〜78行目)。実際の値はoc env
コマンドで定義します。
- 編集したデプロイメントコンフィグの抜粋
55 "containers": [ 56 { 57 "name": "hello-php", 58 "image": "172.30.131.34:5000/extdbtest/hello-php@sha256:bb766f1c8fc7aab47fce0ce9bccb24e1a18fb692e4c8ddd33c40c994c0587e00", 59 "ports": [ 60 { 61 "containerPort": 8080, 62 "protocol": "TCP" 63 } 64 ], 65 "env": [ 66 { 67 "name": "MYSQL_USER", 68 "value": "${MYSQL_USER}" 69 }, 70 { 71 "name": "MYSQL_PASSWORD", 72 "value": "${MYSQL_PASSWORD}" 73 }, 74 { 75 "name": "MYSQL_DATABASE", 76 "value": "${MYSQL_DATABASE}" 77 } 78 ], 79 "resources": {}, 80 "terminationMessagePath": "/dev/termination-log", 81 "imagePullPolicy": "Always" 82 } 83 ],
デプロイメントコンフィグの更新
デプロイメントコンフィグを更新します。更新するとLATEST VERSIONが1つインクリメントされます。
oc replace --force -f hello-php-dc.json
環境変数の設定
まず、環境変数が設定されていないことを確認します。
oc env dc/hello-php --list
を実行すると、以下のように出力されます。
# deploymentconfigs hello-php, container hello-php MYSQL_USER=${MYSQL_USER} MYSQL_PASSWORD=${MYSQL_PASSWORD} MYSQL_DATABASE=${MYSQL_DATABASE}
oc env
コマンドで環境変数を設定します。
oc env dc hello-php -e MYSQL_USER=root -e MYSQL_PASSWORD=mysql -e MYSQL_DATABASE=mydb
再度oc env dc/hello-php --list
を実行すると、環境変数が設定されていることを確認できます。
# deploymentconfigs hello-php, container hello-php MYSQL_USER=root MYSQL_PASSWORD=mysql MYSQL_DATABASE=mydb
アプリケーションの確認
curl hello-php.extdbtest.apps.cloud
コマンドを実行すると、以下のように表示されます。
<h1>Hello External DB</h1>array(1) { ["msg"]=> string(15) "hello opensihft" }
設定の詳細はOpenShift v3 Developer GuideChapter 9. Integrating External Services - Red Hat Customer Portalをみてください。
OpenShift v3 のJBoss Web Server (tomcat7)+MySQL テンプレートの使い方
Tomcat/MySQLのテンプレートを使う場合、少しだけ設定が必要だったのでメモ
やりたいこと
JBoss Web Server (tomcat7)/MySQLのテンプレートを使って簡単なアプリケーションのデプロイ。デプロイするアプリケーションはtomcatのサンプルアプリケーションを利用します。
利用するテンプレート
パラメータ
パラメータ名 | 値 | 備考 |
---|---|---|
APPLICATION_HOSTNAME | sample-extdbtest.apps.cloud | 公開するときのFQDNを指定 |
GIT_URI | https://github.com/apache/tomcat.git | Tomcatのサンプルアプリ |
アプリケーションの確認
http://sample-extdbtest.apps.cloud/examples/index.html にアクセスして、以下のページが表示されるはず。だった。。。
<title>Apache Tomcat Examples</title> </head> <body> <p> <h3>Apache Tomcat Examples</H3> <p></p> <ul> <li><a href="servlets">Servlets examples</a></li> <li><a href="jsp">JSP Examples</a></li> <li><a href="websocket/index.xhtml">WebSocket (JSR356) Examples</a></li> <li><a href="websocket-deprecated">WebSocket Examples using the deprecated Apache Tomcat proprietary API</a></li> </ul> </body></html>
発生した問題
build
サンプルアプリケーションのタグがmaster
ではなくtrunk
だった。
これは、アプリケーション作成時に設定するパラメータGIT_REF
をtrunk
に設定すれば良い。すでに作成済みのbuildConfigを直接編集してもOK。
source: git: ref: trunk uri: https://github.com/apache/tomcat.git type: Git
編集後、build を実行。
oc start-build jws-app
deploy
ServiceAccount、Secretがない
deploy に失敗するので、oc get events
でイベントログを確認したところ、Podの作成にjws-service-accountがないというエラー。
これを解決して、気を取り直して再デプロイするも、今度はVolumeをマウントするのにjws-app-secret
がないというエラー。
jws-service-accountとjws-app-secretをhttps://github.com/jboss-openshift/application-templates/blob/master/secrets/jws-app-secret.jsonに使って作成。
oc create -f jws-app-secret.json
設定後、deploy を再実行。
oc deploy jws-app --latest
これで無事にアプリケーションがデプロイできました。