Skip to content

Latest commit

 

History

History
272 lines (238 loc) · 8.62 KB

Practice.md

File metadata and controls

272 lines (238 loc) · 8.62 KB

前: RBAC


章末問題

中級で解説した各種APIリソースを使用して、Spring Bootのデモアプリdayan888/springdemo_k8sが稼働する環境を構築します。

構成図

問題1: NFSサーバ

次の要件を満たすmanifestを作成し、デプロイしてください。

  • 要件
    • Namespace
      • 名前はsbdemo-nfs
    • PVC
      • 名前はsbdemo-nfs-server-pvc
      • Namespaceはsbdemo-nfs
      • storageClassNameは指定しない(デフォルトのStorageClassを使用する)
      • accessModesはReadWriteOnce
      • ストレージ容量は1Gi
    • Deployment
      • 名前はsbdemo-nfs-server
      • Namespaceはsbdemo-nfs
      • replicas: 1
      • labelはすべてrole: nfs-server
      • Pod
        • イメージはitsthenetwork/nfs-server-alpine
        • env
          • SHARED_DIRECTORYの値は/exports
        • volumeプラグインで上記PVC:sbdemo-nfs-server-pvcを指定
        • 上記で定義したボリュームをコンテナの/exportsにマウント
        • 待ち受けポートは次の通り
          • nfs: 2049
          • mountd: 20048
          • rpcbind: 111
        • securityContextにprivileged: trueを指定
    • Service
      • 名前はsbdemo-nfs-server-service
      • Namespaceはsbdemo-nfs
      • タイプは指定なし(ClusterIP)
      • 待ち受けポートは次の通り
        • nfs: 2049
        • mountd: 20048
        • rpcbind: 111
      • selectorはrole: nfs-server
    • PersistentVolume
      • 名前はsbdemo-nfs-pv
      • labelはすべてrole: nfs-pv
      • accessModesはReadWriteOnce
      • ストレージ容量は1Gi
      • nfsの設定は次の通り
        • server: <sbdemo-nfs-server-serviceのClusterIP>
        • path: "/"

問題2: Redisサーバ

次の要件を満たすmanifestを作成し、デプロイしてください。

  • 要件
    • Namespace
      • 名前はsbdemo-redis
    • Deployment
      • 名前はsbdemo-redis
      • Namespaceはsbdemo-redis
      • replicas: 1
      • labelはすべてapp: sbdemo-redis
      • Pod
        • 名前はsbdemo-redis
        • イメージはredis:alpine
        • 待ち受けポートは6379
    • Service
      • 名前はsbdemo-redis-service
      • Namespaceはsbdemo-redis
      • タイプは指定なし(ClusterIP)
      • ProtocolはTCP
      • 待ち受けポートは6379
      • ターゲットポートは6379
      • selectorはapp: sbdemo-redis

問題3: DBサーバ

次の要件を満たすmanifestを作成し、デプロイしてください。

  • 要件
    • Namespace
      • 名前はsbdemo-db
    • StatefulSet
      • 名前はsbdemo-postgres-sts
      • Namespaceはsbdemo-db
      • labelはすべてapp: sbdemo-postgres-sts
      • replicasは 1
      • Pod
        • 名前はpostgres
        • イメージはdayan888/springdemo:postgres9.6
        • 待ち受けポートは5432
    • Service
      • 名前はsbdemo-postgres-service
      • Namespaceはsbdemo-db
      • typeはClusterIP(明示的に指定する)
      • clusterIPにNone
      • ProtocolはTCP
      • 待ち受けポートは5432
      • ターゲットポートは5432
      • selectorはapp: sbdemo-postgres-sts

問題4: APサーバ

次の要件を満たすmanifestを作成し、デプロイしてください。

  • 要件
    • Namespace
      • 名前はsbdemo-ap
    • PersistentVolumeClaim
      • 名前はsbdemo-nfs-pvc
      • Namespaceはsbdemo-ap
      • storageClassNameは指定しない
      • selectorはrole: nfs-pv
      • accessModesはReadWriteOnce
      • ストレージ容量は1Gi
    • ConfigMap
      • 名前はap-config
      • Namespaceはsbdemo-ap
      • 以下のKey-Valueをdataとして持つ
        • SPRING_PROFILES_ACTIVE: "prd"
        • DB_URL: "jdbc:postgresql://sbdemo-postgres-service.sbdemo-db:5432/demodb?user=postgres&password=postgres"
        • PIC_DIR: "/opt/picDir"
        • REDIS_HOST: "sbdemo-redis-service.sbdemo-redis"
        • REDIS_PORT: "6379"
    • Deployment
      • Deployment
        • 名前はsbdemo-apserver
        • Namespaceはsbdemo-ap
        • labelはすべてapp: sbdemo-apserver
        • replicasは 3
        • Pod
          • 名前はapserver
          • イメージはdayan888/springdemo:apserver
          • 待ち受けポートは8080
          • env
            • ConfigMap:ap-config
          • volumeプラグインでPVC:sbdemo-nfs-pvcを指定
          • 上記で定義したボリュームをコンテナの/opt/picDirにマウント
      • Service
        • 名前はsbdemo-apservice
        • Namespaceはsbdemo-ap
        • typeはClusterIP
        • ProtocolはTCP
        • 待ち受けポートは8080
        • ターゲットポートは8080
        • selectorはapp: sbdemo-apserver

問題5: WEBサーバ

次の要件を満たすmanifestを作成し、デプロイしてください。

  • 要件
    • Namespace

      • 名前はsbdemo-web
    • ConfigMap(1つめ)

      • 名前はnginx-conf

      • Namespaceはsbdemo-web

      • 以下の内容が記述されたnginx.confをdataとして持つ

        user  nginx;
        worker_processes 1;
        pid        /var/run/nginx.pid;
        events {
            worker_connections 1024;
        }
        http {
            include       /etc/nginx/mime.types;
            default_type  application/octet-stream;
            log_format  main  '$remote_addr - $remote_user [$time_local]  request" '
                              '$status $body_bytes_sent "$http_referer" '
                              '"$http_user_agent" "$http_x_forwarded_for"';
            access_log /dev/stdout;
            error_log  /dev/stderr debug;
            sendfile        on;
            keepalive_timeout  65;
            include /etc/nginx/conf.d/server.conf;
        }
    • ConfigMap(2つめ)

      • 名前はserver-conf

      • Namespaceはsbdemo-web

      • 以下の内容が記述されたserver.confをdataとして持つ

        server {
            server_name  springdemo.example.com;
            listen 80;
            location ~* \.(js|jpg|png|css)$ {
                expires 168h;
                root   /usr/share/nginx/html;
            }
            location / {
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Server $host;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $http_host;
                proxy_pass http://sbdemo-apservice.sbdemo-ap:8080;
                proxy_cookie_path / /;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /usr/share/nginx/html;
            }
        }
    • Deployment

      • Deployment
        • 名前はsbdemo-nginx
        • Namespaceはsbdemo-web
        • labelはすべてapp: sbdemo-nginx
        • replicasは 3
        • Pod
          • 名前はnginx
          • イメージはdayan888/springdemo:nginx
          • 待ち受けポートは80
          • ConfigMap:nginx-confを/etc/nginx/nginx.confにマウントする
            • subPath:nginx.conf を設定する
          • ConfigMap:server-confを/etc/nginx/conf.d/server.confにマウントする
            • subPath:server.conf を設定する
      • Service
        • 名前はsbdemo-nginx-service
        • Namespaceはsbdemo-web
        • typeはClusterIP
        • ProtocolはTCP
        • 待ち受けポートは80
        • ターゲットポートは80
        • selectorはapp: sbdemo-nginx

問題6: フロントLoadBalancer

次の要件を満たすmanifestを作成し、デプロイしてください。

  • 要件
    • Service
      • 名前はsbdemo-nginx-lb
      • Namespaceはsbdemo-web
      • 対象のlabelはapp: sbdemo-nginx
      • プロトコルはTCP
      • Portは80
      • clusterIPは指定なしで良い
      • typeはLoadBalancer

問題7: 接続確認

インターネット接続可能な端末のWebブラウザからさきほど確認したsbdemo-nginx-lbのEXTERNAL-IPにアクセスしてください。
問題1~問題6の構築が正常に完了している場合、次のログイン画面が表示されますのでログインしてみましょう。 ログイン情報はID/PW=admin/111111です。

sbdemo

以上で本演習は終了です。

具体的な操作およびその結果に関する回答例はこちらにあります。 具体的な操作方法がわからなかった場合や、想定した結果にならなかった場合などに参照してください。


次: 上級