Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プライベートクラウドのサービス運用環境をK8sで改善する話

dulltz
November 26, 2019

 プライベートクラウドのサービス運用環境をK8sで改善する話

dulltz

November 26, 2019
Tweet

More Decks by dulltz

Other Decks in Programming

Transcript

  1. インフラ刷新の進捗状況 – Done: 本番含め3データセンターでk8sクラスタ稼働中 – ⾃作k8s管理ツールCKEがCertifiedに Cybozu Kubernetes Engine -

    CNCF Cloud Native Interactive Landscape – WIP: Rook/Ceph – LVサポートのためにissue/PR出したり – WIP: サービス移⾏プロジェクトManeki – Cybozuにおける⼤規模インフラ基盤の移⾏プロジェクト Manekiの紹介 - Speaker Deck
  2. 旧基盤 Ubuntuアップグレード – Ubuntu 14.04 から 16.04 へのアップグレード – 内蔵ミドルウェアの変更が

    サービス運⽤に影響ないかチェックする必要あり – Changelogを全部チェック – 実機で実験 – 不具合が現れたら原因調査、改修
  3. 開発環境よくなった – 開発環境を松⽵梅で⽤意 – Kind環境 – ローカルPCで動く – Nested VM環境

    – GCEインスタンスで動く – K8sの下回りのミドルウェアやネットワーク構成が本番と同じ – 実機環境 – どうしても実機が必要なとき使う
  4. 処理の流れ Contour⽤カス タムリソースを 作成する • ユーザが作成 Certificateと DNSEndpoint が作成される •

    contour-plus TLS証明書と Aレコードが 作成される • cert-manager • external-dns
  5. 運⽤コストは下がった? – これまで⾯倒だったことが楽になった – OSアップグレード – サービスデプロイ – 開発環境 –

    その他⾊々 – ⾃分たちで全部作らなくても既存ツールの組み合わせで いい感じにできるように – ただしk8sの運⽤・アップグレードという新タスクも発⽣
  6. 今有効にしてるadmission controller https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#is-there-a-recommended- set-of-admission-controllers-to-use を参考に – NamespaceLifecycle – LimitRanger –

    ServiceAccount – Priority – DefaultTolerationSeconds – DefaultStorageClass – PersistentVolumeClaimResize – MutatingAdmissionWebhook – ValidatingAdmissionWebhook – ResourceQuota – StorageObjectInUseProtection – NodeRestriction – PodSecurityPolicy
  7. デフォルトのPSP spec: privileged: false allowPrivilegeEscalation: false requiredDropCapabilities: - ALL volumes:

    - 'configMap' - 'emptyDir' - 'projected' - 'secret' - 'downwardAPI’ - 'persistentVolumeClaim' hostNetwork: false hostIPC: false hostPID: false runAsUser: rule: 'MustRunAsNonRoot' seLinux: rule: 'RunAsAny' supplementalGroups: rule: 'MustRunAs' ranges: - min: 1 max: 65535 fsGroup: rule: 'MustRunAs' ranges: - min: 1 max: 65535 readOnlyRootFilesystem: true • 以下を不許可 • すべてのCapability • ホストのプロセス/ネットワーク/ファ イルシステムへのアクセス • rootによる実⾏を禁⽌ • ルートファイルシステムは read-only
  8. 緩和したPSP spec: privileged: false allowPrivilegeEscalation: false requiredDropCapabilities: - ALL volumes:

    - 'configMap' - 'emptyDir' - 'projected' - 'secret' - 'downwardAPI’ - 'persistentVolumeClaim’ hostNetwork: true hostPorts: - max: 7472 min: 7472 hostIPC: false hostPID: false runAsUser: rule: 'MustRunAsNonRoot' seLinux: rule: 'RunAsAny' supplementalGroups: rule: 'MustRunAs' ranges: - min: 1 max: 65535 fsGroup: rule: 'MustRunAs' ranges: - min: 1 max: 65535 readOnlyRootFilesystem: true Metallb(ロードバランサー実装)のPSP • ホストネットワークの使⽤を許可
  9. ResourceQuota, LimitRange – ResourceQuota – Namespaceごとに使⽤可能なリソース(CPU,RAM)の総量を設定 – LimitRange – Pod,PVCなどに割り当てるリソースの最⼩値/最⼤値を設定

    – 基盤チームは無制限 – テナントにはクラスタを壊さない程度の制限を設定 – 具体的な数値は相談しながら調整