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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for dulltz dulltz
November 26, 2019

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

Avatar for dulltz

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などに割り当てるリソースの最⼩値/最⼤値を設定

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