寄稿しました
CetOS7からGKEを利用してWordPressをセットアップしてみました、CUIで基本的に設定していきます。
GCPのKubernetesマネージド環境のGKEはAWSのEKSより安いので選択しやすい。
もくじ
環境
- コマンド操作側;オンプレのCentOS7
- クラウド側:GCP GKE
条件
- プロジェクトを作成しておく
- 支払いを有効化する
- Kubernetes Engine API 有効化
https://console.cloud.google.com/apis/api/container.googleapis.com/overview?project=プロジェクト名
これはGUIで設定しておきましょ~!
ここから作業するよ!
基本的にCUIで作業します。
GCP操作ユーザの作成
# useradd gcpuser
GCPユーザ設定
# visudo ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL ↓変更 ## Same thing without a password %wheel ALL=(ALL) NOPASSWD: ALL
sudo可能なwheelに入れる
# usermod -aG wheel gcpuser
ここからはGCP操作ユーザのgcpuserで作業します。
# su - gcpuser
GCP操作に必要なwget, gitをインストール
# sudo yum install wget git
SDKのリポジトリの登録
$ sudo vi /etc/yum.repos.d/google-cloud-sdk.repo [google-cloud-sdk] name=Google Cloud SDK baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
インストール
$ sudo yum install google-cloud-sdk
バージョン確認
$ gcloud version Google Cloud SDK 237.0.0 alpha 2019.03.01 beta 2019.03.01 bq 2.0.42 core 2019.03.01 gsutil 4.37 kubectl 2019.03.01
gcloud初期設定
$ gcloud init You must log in to continue. Would you like to log in (Y/n)? Go to the following link in your browser: ●リンクが表示されるのでアクセスしてcodeを入力する Enter verification code: xxxxxxxxxxxxxxxxxxxxxx ●プロジェクトを選択する Pick cloud project to use: [1] theta-carving-233206 [2] yuugiroku [3] Create a new project Please enter numeric choice or text value (must exactly match list item): 2 ●リージョン選択 Do you want to configure a default Compute Region and Zone? (Y/n)? y (略) [29] asia-southeast1-b [30] asia-southeast1-a [31] asia-southeast1-c [32] asia-northeast1-b [33] asia-northeast1-c [34] asia-northeast1-a [35] asia-south1-c [36] asia-south1-b [37] asia-south1-a [38] australia-southeast1-b [39] australia-southeast1-c [40] australia-southeast1-a [41] southamerica-east1-b [42] southamerica-east1-c [43] southamerica-east1-a [44] asia-east2-a [45] asia-east2-b [46] asia-east2-c [47] europe-north1-a [48] europe-north1-b [49] europe-north1-c [50] europe-west6-a Did not print [9] options. Too many options [59]. Enter "list" at prompt to print choices fully. Please enter numeric choice or text value (must exactly match list item): 34 ←日本を選択
プロジェクト選択する場合
$ gcloud config set project yuugiroku Updated property [core/project].
リージョンを選ぶ場合
$ gcloud config set compute/zone asia-northeast1-a Updated property [compute/zone].
設定内容確認
$ gcloud config list [compute] region = asia-northeast1 zone = asia-northeast1-a [core] account = hoge@gmail.com disable_usage_reporting = True project = yuugiroku Your active configuration is: [default]
Kubernetesリポジトリの作成
$ sudo vi /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
Kubernetes操作モジュールのインストール
$ sudo yum install kubectl google-cloud-sdk google-cloud-sdk-app-engine-grpc google-cloud-sdk-pubsub-emulator google-cloud-sdk-app-engine-go google-cloud-sdk-cloud-build-local google-cloud-sdk-datastore-emulator google-cloud-sdk-app-engine-python google-cloud-sdk-cbt google-cloud-sdk-bigtable-emulator google-cloud-sdk-datalab google-cloud-sdk-app-engine-java
Cloud SDKのインストール
curl https://sdk.cloud.google.com | bash Remove it before installing? (y/N): y Do you want to continue (Y/n)? y [/home/gcpuser/.bashrc]:Enter Do you want to help improve the Google Cloud SDK (Y/n)?Enter Do you want to continue (Y/n)?Enter Enter a path to an rc file to update, or leave blank to use [/home/gcpuser/.bashrc]:Enter ==> Start a new shell for the changes to take effect. For more information on how to get started, please visit: https://cloud.google.com/sdk/docs/quickstarts
Kubernetesのサンプルファイルをダウンロード
$ git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
ダウンロードできたことを確認
$ ls -laht 合計 19M drwxrwxr-x 14 gcpuser gcpuser 308 3月 1 17:04 kubernetes-engine-samples drwx------ 6 gcpuser gcpuser 232 3月 1 17:04 . drwxrw---- 3 gcpuser gcpuser 19 3月 1 17:04 .pki -rw------- 1 gcpuser gcpuser 18K 3月 1 16:47 .boto drwxrwxr-x 3 gcpuser gcpuser 20 3月 1 16:44 .config -rw------- 1 gcpuser gcpuser 204 3月 1 16:38 .bash_history drwxr-xr-x. 3 root root 21 3月 1 16:36 .. -rw-rw-r-- 1 gcpuser gcpuser 19M 4月 3 2018 google-cloud-sdk-196.0.0-linux-x86_64.tar.gz drwxr-xr-x 9 gcpuser gcpuser 329 3月 31 2018 google-cloud-sdk -rw-r--r-- 1 gcpuser gcpuser 18 8月 3 2016 .bash_logout -rw-r--r-- 1 gcpuser gcpuser 193 8月 3 2016 .bash_profile -rw-r--r-- 1 gcpuser gcpuser 231 8月 3 2016 .bashrc
wordpressという名前でノードを2台作成する
$ gcloud container clusters create wordpress --num-nodes=2 NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS wordpress asia-northeast1-a 1.11.7-gke.4 35.xxx.xxx.187 n1-standard-1 1.11.7-gke.4 2 RUNNING
MySQL用の永続ディスク, WordPressデータファイル用の永続ディスクをを作成
$ gcloud compute disks create --size 200GB mysql-disk $ gcloud compute disks create --size 200GB wordpress-disk
MySQL接続用パスワードを設定
$ kubectl create secret generic mysql --from-literal=password=<MySQLパスワード>
テンプレートファイルの確認
$ ls -laht /home/gcpuser/kubernetes-engine-samples/wordpress-persistent-disks 合計 28K drwxrwxr-x 2 gcpuser gcpuser 183 3月 1 17:04 . drwxrwxr-x 14 gcpuser gcpuser 308 3月 1 17:04 .. -rw-rw-r-- 1 gcpuser gcpuser 152 3月 1 17:04 README.md -rw-rw-r-- 1 gcpuser gcpuser 155 3月 1 17:04 mysql-service.yaml -rw-rw-r-- 1 gcpuser gcpuser 168 3月 1 17:04 mysql-volumeclaim.yaml -rw-rw-r-- 1 gcpuser gcpuser 776 3月 1 17:04 mysql.yaml -rw-rw-r-- 1 gcpuser gcpuser 209 3月 1 17:04 wordpress-service.yaml -rw-rw-r-- 1 gcpuser gcpuser 172 3月 1 17:04 wordpress-volumeclaim.yaml -rw-rw-r-- 1 gcpuser gcpuser 867 3月 1 17:04 wordpress.yaml
MySQLセットアップ
vi /home/gcpuser/kubernetes-engine-samples/wordpress-persistent-disks/mysql.yaml kind: Deployment metadata: name: mysql labels: app: mysql spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - image: mysql:5.6 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage gcePersistentDisk: pdName: mysql-disk ←●ディスクを指定 fsType: ext4
デプロイ
$ kubectl create -f /home/gcpuser/kubernetes-engine-samples/wordpress-persistent-disks/mysql.yaml
Podの確認
$ kubectl get pod -l app=mysql NAME READY STATUS RESTARTS AGE mysql-5bfd5f74dd-sb2p5 0/1 Pending 0 30s
MySQL サービスを作成する
$ kubectl create -f /home/gcpuser/kubernetes-engine-samples/wordpress-persistent-disks/mysql-service.yaml service/mysql created
サービスの確認
$ kubectl get service mysql NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql ClusterIP 10.39.245.140 <none> 3306/TCP 28s
WordPressをセットアップ
$ vi /home/gcpuser/kubernetes-engine-samples/wordpress-persistent-disks/wordpress.yaml apiVersion: apps/v1 kind: Deployment metadata: name: wordpress labels: app: wordpress spec: replicas: 1 selector: matchLabels: app: wordpress template: metadata: labels: app: wordpress spec: containers: - image: wordpress name: wordpress env: - name: WORDPRESS_DB_HOST value: mysql:3306 - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql key: password ports: - containerPort: 80 name: wordpress volumeMounts: - name: wordpress-persistent-storage mountPath: /var/www/html volumes: - name: wordpress-persistent-storage gcePersistentDisk: pdName: wordpress-disk fsType: ext4
WordPressデプロイ
$ kubectl create -f /home/gcpuser/kubernetes-engine-samples/wordpress-persistent-disks/wordpress.yaml deployment.apps/wordpress created
Podの確認
$ kubectl get pod -l app=wordpress NAME READY STATUS RESTARTS AGE wordpress-78c9b8d684-ksjx4 0/1 Pending 0 7s
WordPressサービスの作成
$ kubectl create -f /home/gcpuser/kubernetes-engine-samples/wordpress-persistent-disks/wordpress-service.yaml service/wordpress created
Podの確認
$ kubectl get pod NAME READY STATUS RESTARTS AGE mysql-5bfd5f74dd-sb2p5 0/1 Pending 0 14m wordpress-78c9b8d684-ksjx4 0/1 Pending 0 11m
サービスの確認
$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.39.240.1 <none> 443/TCP 29m mysql ClusterIP 10.39.245.140 <none> 3306/TCP 13m wordpress LoadBalancer 10.39.244.221 34.xxx.xxx.21 80:31944/TCP 11m
$ kubectl get svc -l app=wordpress NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress LoadBalancer 10.39.244.221 <pending> 80:31944/TCP 17s まだEXTERNAL-IPが出てこない $ kubectl get svc -l app=wordpress NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress LoadBalancer 10.xxx.xxx.221 34.xxx.xxx.21 80:31944/TCP 1m
EXTERNAL-IPでアクセスするとセットアップ画面が現れる
http://34.xxx.xxx.176/
クラスターを削除する
すべて削除する場合
現状の確認
$ gcloud compute forwarding-rules list NAME REGION IP_ADDRESS IP_PROTOCOL TARGET a213284fe40ad11e98e9542010a92000 asia-northeast1 34.xxx.xxx.176 TCP asia-northeast1/targetPools/a213284fe40ad11e98e9542010a92000
すべて削除実行
$ kubectl delete all,pvc,secret --all pod "mysql-5bfd5f74dd-sb2p5" deleted pod "wordpress-78c9b8d684-ksjx4" deleted service "kubernetes" deleted service "mysql" deleted service "wordpress" deleted deployment.apps "mysql" deleted deployment.apps "wordpress" deleted secret "default-token-s2t78" deleted secret "mysql" deleted
削除された確認
$ gcloud compute forwarding-rules list Listed 0 items.
はい、お疲れ様です!