GCP

GCP GKE(Kubernetes) WordPressセットアップ

GCP GKE(Kubernetes) WordPressセットアップ

 

 

 

寄稿しました

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.

 

はい、お疲れ様です!

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)