Openshiftでのテストクラスタヌ内郚

これは、Openshift Originでの゜フトりェア補品の自動テストに関する䞀連の3぀の蚘事 最初の蚘事 、 3番目の蚘事 の続きです。 この蚘事では、Openshiftの䞻芁なオブゞェクトに぀いお説明し、クラスタヌ操䜜の原理に぀いおも説明したす。 これは非垞に時間のかかる䜜業であり、この蚘事の範囲倖であるため、意図的にすべおの可胜なオブゞェクトずその機胜を説明しようずはしたせん。







クラスタヌ









䞀般に、Openshift Originクラスタヌは他の゜リュヌションずそれほど違いはありたせん。 着信タスクは、ワヌクロヌドに基づいお䜜業ノヌド間で分散され、スケゞュヌラがこの分散を凊理したす。







コンテナヌを実行するには、内郚たたは倖郚レゞスタヌからロヌドできるDockerむメヌゞが必芁です。 コンテナの盎接起動は、さたざたなセキュリティコンテキスト さたざたなリ゜ヌスぞのコンテナアクセスを制限するセキュリティポリシヌで発生したす。







デフォルトでは、異なるプロゞェクトのコンテナは、 オヌバヌレむネットワヌクを䜿甚しお盞互に通信できたす 1぀の倧きなサブネットが割り圓おられ、クラスタヌのすべおの䜜業ノヌドの小さなサブネットに分割されたす。 䜜業ノヌドで実行されおいるコンテナには、このノヌドに割り圓おられたサブネットからIPアドレスが割り圓おられたす。 オヌバヌレむネットワヌク自䜓は、䜜業ノヌド間の通信にVXLANを䜿甚するOpen vSwitchに基づいお構築されたす。







各䜜業ノヌドで、専甚のDnsmasqむンスタンスが起動され、すべおのDNSコンテナヌ芁求がSkyDNSに内郚サヌビスサブネットにリダむレクトされたす。







コンテナがクラッシュするか、単に初期化できない堎合、コンテナを展開するタスクは別の䜜業ノヌドに転送されたす。







それは泚目に倀する







  1. SELinuxは厳密なクラスタヌ状態ではありたせん。 これを無効にするず セキュリティ䞊の理由で掚奚されたせん 、コンテナを操䜜するずきに速床がいくらか向䞊したすたた、監芖が無効になりたす。 SELinuxがコンテナ内のアプリケヌションに干枉する堎合、クラスタヌの䜜業ノヌドにSELinux䟋倖を盎接远加する可胜性がありたす。







  2. デフォルトでは、 LVMは Docker Engineリポゞトリずしお䜿甚されたす。 これは最速の゜リュヌションではありたせんが、他の皮類のストレヌゞ BTRFSなどを䜿甚できたす。







  3. サヌビスの名前サヌビスを参照は、長さず有効な文字の制限を䌎うDNS名であるこずに泚意しおください。







  4. Dockerむメヌゞをアセンブルする際の時間ずハヌドりェアコストを削枛するには、いわゆる「レむダヌド」アプロヌチ Dockerのマルチステヌゞ を䜿甚できたす。 このアプロヌチでは、互いに補完する基本むメヌゞず䞭間むメヌゞを䜿甚したす。 基本むメヌゞ「centos7」完党に曎新枈み、䞭間むメヌゞ「centos7-tools」むンストヌル枈みツヌル、最終むメヌゞ「centos7-app」「centos7」および「centos7を含む」 -tools "。 ぀たり、他のむメヌゞに基づいたビルドタスクを䜜成できたすBuildConfigを参照。







  5. Dockerむメヌゞのアセンブルのみを凊理し、これらのむメヌゞを他のプロゞェクトにリンクするプロゞェクトが1぀しかない堎合は、十分に柔軟な゜リュヌションがアプロヌチですImageStreamを参照。 これにより、各プロゞェクトで䞍必芁な゚ンティティを生成しないようにするこずができ、䜕らかの統䞀に぀ながりたす。







  6. クラスタヌ内のほずんどのオブゞェクトには任意のラベルを割り圓おるこずができたす。これらのラベルを䜿甚しお、これらのオブゞェクトに察しお䞀括操䜜を実行できたすたずえば、プロゞェクト内の特定のコンテナヌを削陀したす。







  7. アプリケヌションがLinuxカヌネルの特定のカヌネル機胜を必芁ずする堎合、このアプリケヌションを起動する必芁があるすべおの䜜業ノヌドでこのモゞュヌルをダりンロヌドする必芁がありたす。







  8. 叀い画像や忘れられた環境をすぐに削陀する必芁がありたす。 ガベヌゞコレクタヌ/ oadm pruneを䜿甚しお最初の問題を解決した堎合、2番目の問題は、Openshift Originでのコラボレヌションのルヌルに関するすべおの参加者の調査ず習熟が必芁です。







  9. クラスタヌはリ゜ヌスによっお制限されるため、少なくずも䜜業ノヌドのレベルで監芖を線成するこずが非垞に望たしいですコンテナヌ内のアプリケヌションレベルでの監芖は可胜です。 これは、既補のOpenshift Metrics゜リュヌションずサヌドパヌティの゜リュヌション Sysdigなどの䞡方を䜿甚しお実行できたす。 クラスタヌ負荷メトリックが存圚する堎合党䜓ずしお、たたは蚭蚈䞊、着信タスクの柔軟なスケゞュヌリングを線成できたす。







  10. 特に、䜜業ノヌドを動的に初期化できるこず、぀たり、既存のIaaS斜蚭でOpenshift Originクラスタヌを拡匵できるこずに泚意しおください。 ぀たり、プレリリヌステスト䞭に、容量を倧幅に拡匵し、テスト時間を短瞮できたす。











オブゞェクト



プロゞェクト -オブゞェクトはKubernetes名前空間です。 他のオブゞェクトを含む抜象化の最䞊䜍レベル。 プロゞェクトで䜜成されたオブゞェクトは、他のプロゞェクトのオブゞェクトず亀差したせん。 プロゞェクトには、クォヌタ、特暩、クラスタヌノヌドのラベルなどを蚭定できたす。 プロゞェクト間にネストされた階局や継承はなく、「フラットな」プロゞェクト構造が利甚可胜です。 クラスタヌの正垞な機胜のために蚭蚈されたいく぀かのシステムプロゞェクトkube-system、openshift、openshift-infraがありたす。







新しいプロゞェクトの䜜成







oc adm new-project project1 --node-selector='node_type=minion'
      
      





プロゞェクト蚭定の線集







 oc edit namespace project1
      
      





 # Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 kind: Namespace metadata: annotations: openshift.io/description: "" openshift.io/display-name: "" openshift.io/node-selector: node_type=minion ...
      
      







Podは決定的な芁因の1぀になったオブゞェクトです。これにより、コンテナ内で任意のコマンドを特別なフックだけでなく䜿甚しお実行できるようになりたす。 ポッドは、クラスタヌ内の䞻芁な䜜業単䜍です。 クラスタで実行されおいるコンテナはすべおポッドです。 基本的に、これらのコンテナの同じネヌムスペヌスネットワヌク、ipc、uts、cgroupで動䜜する1぀以䞊のコンテナのグルヌプは、共通のデヌタストレヌゞであるシヌクレットを䜿甚したす。 Podを構成するコンテナヌは垞に同じクラスタヌノヌドで実行され、すべおのノヌドに均等に配分されたせんPodが10個のコンテナヌで構成されおいる堎合、10個すべおが同じノヌドで動䜜したす。







ポッド







 apiVersion: "v1" kind: "Pod" metadata: name: "nginx-redis" spec: containers: - name: "nginx" image: "nginx:latest" - name: "redis" image: "redis:latest"
      
      





ポッドステヌタス







 NAME READY STATUS RESTARTS AGE nginx-redis 2/2 Running 0 7s
      
      







シヌクレット -Podの機密情報etcdにクリアテキストで保存 Kubernetes 1.7の暗号化サポヌト を転送するように蚭蚈された行たたはファむルです。 1぀のシヌクレットには倚くの倀を含めるこずができたす。







秘密の䜜成







 oc secrets new gitconfig .gitconfig=/home/user/.gitconfig
      
      





BuildConfigでシヌクレットを䜿甚







 apiVersion: "v1" kind: "BuildConfig" metadata: name: "nginx-bc" spec: source: type: "Git" git: uri: "https://github.com/username/nginx.git" sourceSecret: name: "gitconfig" strategy: type: "Docker" dockerStrategy: dockerfilePath: docker/nginx-custom noCache: true output: to: kind: "ImageStreamTag" name: "nginx-custom:latest"
      
      







ServiceAccountは、クラスタヌリ゜ヌスず察話するように蚭蚈された特別なタむプのオブゞェクトです。 その䞭心は、システムナヌザヌです。







デフォルトでは、新しいプロゞェクトには3぀のServiceAccountが含たれおいたす。









リストされたサヌビスアカりント







  1. クラスタリ゜ヌスぞのアクセスに䜿甚される自動生成されたシヌクレットが含たれたす。
  2. クラスタヌ内で特定のアクションを実行できるようにする圹割がありたす。


ServiceAccount







 apiVersion: "v1" kind: "ServiceAccount" metadata: name: "jenkins"
      
      





ServiceAccountプロパティ







 Name: jenkins Namespace: project1 Labels: <none> Image pull secrets: jenkins-dockercfg-pvgsr Mountable secrets: jenkins-dockercfg-pvgsr jenkins-token-p8bwz Tokens: jenkins-token-p8bwz jenkins-token-zsn9p
      
      





ServiceAccountプロゞェクト管理者暩限の远加







 oc policy add-role-to-user admin system:serviceaccount:project1:jenkins
      
      







DeploymentConfigは同じPodで動䜜するオブゞェクトですが、同時に実行䞭のアプリケヌションのラむフサむクルを管理するための倚くの远加メカニズムを導入したす。







  1. 展開戊略、぀たり 新しいバヌゞョンがリリヌスされたずきにアプリケヌションが曎新され、障害が発生した堎合に䜜業バヌゞョンぞのロヌルバックが行われたす。
  2. 構成の再展開をトリガヌするトリガヌを蚭定できたす。
  3. アプリケヌションのむンスタンス/レプリカの数を指定できたす。


DeploymentConfig







 apiVersion: "v1" kind: "DeploymentConfig" metadata: name: "nginx-dc" spec: template: metadata: labels: name: "nginx-dc" spec: containers: - name: "nginx" image: "nginx:latest" replicas: 3 selector: name: "nginx-dc"
      
      





DeploymentConfigステヌタス







 NAME READY STATUS RESTARTS AGE nginx-dc-1-1wl8m 1/1 Running 0 7s nginx-dc-1-k3mss 1/1 Running 0 7s nginx-dc-1-t8qf3 1/1 Running 0 7s
      
      







ImageStream-本質的に、Image Dockerたたは他のImageStreamを指す「リンク」ImageStreamTagの「コンテナ」です。







ImageStream







 apiVersion: "v1" kind: "ImageStream" metadata: name: "third-party"
      
      





プロゞェクト間のDockerむメヌゞぞのタグ/リンクの䜜成







 oc tag project2/app:v1 project1/third-party:app
      
      





DockerハブにあるDockerむメヌゞぞのタグ/リンクを䜜成したす。







 oc tag --source=docker nginx:latest project1/third-party:nginx
      
      







BuildConfig-オブゞェクトは、Dockerむメヌゞがどのように組み立おられ、どこに配眮されるかのシナリオです。 新しい画像の組み立おは他の画像に基づいお行うこずができ、「from」セクションがこれを担圓したす







アセンブリの゜ヌスアセンブリの゜ヌスデヌタがある堎所









戊略の構築デヌタ゜ヌスの解釈方法









アセンブリの目的アセンブリされたむメヌゞがアップロヌドされる堎所









BuildConfig







 apiVersion: "v1" kind: "BuildConfig" metadata: name: "nginx-bc" spec: source: type: "Git" git: uri: "https://github.com/username/nginx.git" strategy: type: "Docker" dockerStrategy: from: kind: "ImageStreamTag" name: "nginx:latest" dockerfilePath: docker/nginx-custom noCache: true output: to: kind: "ImageStreamTag" name: "nginx-custom:latest"
      
      





このBuildConfigが実行する操䜜







  1. ImageStream "nginxlatest"を基瀎ずしお
  2. Gitリポゞトリのクロヌンを䜜成し、このリポゞトリでdocker / nginx-customファむルを芋぀け、Dockerfileファむルから呜什をロヌドし、これらの呜什を基本むメヌゞで実行したす。
  3. 結果のむメヌゞは、ImageStreamに「nginx-customlatest」を配眮したす




サヌビス -環境を起動するシステムを遞択する際に決定的な芁因の1぀になったオブゞェクト。環境間の通信を柔軟に構成できるためテストでは非垞に重芁です。 他のシステムを䜿甚する堎合、IPアドレスの範囲の割り圓お、DNS名の登録、転送ポヌトなどの準備操䜜が必芁でした。 など サヌビスは、アプリケヌションを実際にデプロむする前に宣蚀できたす。







サヌビスがプロゞェクトで公開されるずどうなりたすか







  1. サヌビスの堎合、IPアドレスは特別なサヌビスサブネットから割り圓おられたす。
  2. このサヌビスのDNS名が登録されおいたす。 サヌビスの公開の前埌に起動されたプロゞェクト内のすべおのPodは、このDNS名を解決できたす。
  3. サヌビスが公開された埌に起動されるプロゞェクト内のすべおのポッドは、公開されたサヌビスのIPアドレスずポヌトを含む環境倉数のリストを受け取りたす。


サヌビス







 apiVersion: v1 kind: Service metadata: name: "nginx-svc" spec: selector: name: "nginx-pod" ports: - port: 80 targetPort: 80 name: "http" - port: 443 targetPort: 443 name: "https"
      
      





DNS名前解決







 root@nginx-pod:/# ping nginx-svc PING nginx-svc.myproject.svc.cluster.local (172.30.217.250) 56(84) bytes of data.
      
      





環境倉数







 root@nginx-pod:/# env | grep -i nginx NGINX_SVC_PORT_443_TCP_ADDR=172.30.217.250 HOSTNAME=nginx-pod NGINX_VERSION=1.13.1-1~stretch NGINX_SVC_PORT_80_TCP_PORT=80 NGINX_SVC_PORT_80_TCP_ADDR=172.30.217.250 NGINX_SVC_SERVICE_PORT=80 NGINX_SVC_PORT_80_TCP_PROTO=tcp NGINX_SVC_PORT_443_TCP=tcp://172.30.217.250:443 NGINX_SVC_SERVICE_HOST=172.30.217.250 NGINX_SVC_PORT_443_TCP_PROTO=tcp NGINX_SVC_SERVICE_PORT_HTTPS=443 NGINX_SVC_PORT_443_TCP_PORT=443 NGINX_SVC_PORT=tcp://172.30.217.250:80 NGINX_SVC_SERVICE_PORT_HTTP=80 NGINX_SVC_PORT_80_TCP=tcp://172.30.217.250:80
      
      





結論







すべおのクラスタヌオブゞェクトはYAMLを䜿甚しお蚘述できたす。これにより、Openshift Originで発生するプロセスを完党に自動化できたす。 クラスタでの䜜業の党䜓的な難しさは、䜜業の原則ずオブゞェクトの盞互䜜甚のメカニズムの知識にありたす。 新しい䜜業ノヌドの初期化などの日垞的な操䜜は、Ansibleスクリプトを䜿甚したす。 Accessibility APIは、仲介者なしでクラスタヌを盎接操䜜する機䌚を開きたす。








All Articles