OpenShift - Yönetim

Bu bölümde, bir düğümün nasıl yönetileceği, bir hizmet hesabının nasıl yapılandırılacağı gibi konuları ele alacağız.

Ana ve Düğüm Yapılandırması

OpenShift'te, yeni bir sunucuyu başlatmak için OC ile birlikte start komutunu kullanmamız gerekir. Yeni bir master'ı başlatırken, start komutuyla birlikte master'ı kullanmalıyız, oysa yeni düğümü başlatırken, start komutu ile birlikte düğümü kullanmamız gerekiyor. Bunu yapmak için, ana düğümler ve düğümler için konfigürasyon dosyaları oluşturmamız gerekiyor. Aşağıdaki komutu kullanarak ana ve düğüm için temel bir yapılandırma dosyası oluşturabiliriz.

Ana yapılandırma dosyası için

$ openshift start master --write-config = /openshift.local.config/master

Düğüm yapılandırma dosyası için

$ oadm create-node-config --node-dir = /openshift.local.config/node-<node_hostname> --node = <node_hostname> --hostnames = <hostname>,<ip_address>

Aşağıdaki komutları çalıştırdıktan sonra, yapılandırma için başlangıç ​​noktası olarak kullanılabilecek temel yapılandırma dosyalarını alacağız. Daha sonra yeni sunucuları başlatmak için aynı dosyaya sahip olabiliriz.

apiLevels:
- v1beta3
- v1
apiVersion: v1
assetConfig:
   logoutURL: ""
   masterPublicURL: https://172.10.12.1:7449
   publicURL: https://172.10.2.2:7449/console/
      servingInfo:
         bindAddress: 0.0.0.0:7449
         certFile: master.server.crt
         clientCA: ""
keyFile: master.server.key
   maxRequestsInFlight: 0
   requestTimeoutSeconds: 0
controllers: '*'
corsAllowedOrigins:
- 172.10.2.2:7449
- 127.0.0.1
- localhost
dnsConfig:
   bindAddress: 0.0.0.0:53
etcdClientInfo:
   ca: ca.crt
   certFile: master.etcd-client.crt
   keyFile: master.etcd-client.key
   urls:
   - https://10.0.2.15:4001
etcdConfig:
   address: 10.0.2.15:4001
   peerAddress: 10.0.2.15:7001
   peerServingInfo:
      bindAddress: 0.0.0.0:7001
      certFile: etcd.server.crt
      clientCA: ca.crt
      keyFile: etcd.server.key
   servingInfo:
      bindAddress: 0.0.0.0:4001
      certFile: etcd.server.crt
      clientCA: ca.crt
      keyFile: etcd.server.key
   storageDirectory: /root/openshift.local.etcd
etcdStorageConfig:
   kubernetesStoragePrefix: kubernetes.io
   kubernetesStorageVersion: v1
   openShiftStoragePrefix: openshift.io
   openShiftStorageVersion: v1
imageConfig:
   format: openshift/origin-${component}:${version}
   latest: false
kind: MasterConfig
kubeletClientInfo:
   ca: ca.crt
   certFile: master.kubelet-client.crt
   keyFile: master.kubelet-client.key
   port: 10250
kubernetesMasterConfig:
   apiLevels:
   - v1beta3
   - v1
   apiServerArguments: null
   controllerArguments: null
   masterCount: 1
   masterIP: 10.0.2.15
   podEvictionTimeout: 5m
   schedulerConfigFile: ""
   servicesNodePortRange: 30000-32767
   servicesSubnet: 172.30.0.0/16
   staticNodeNames: []
masterClients:
   externalKubernetesKubeConfig: ""
   openshiftLoopbackKubeConfig: openshift-master.kubeconfig
masterPublicURL: https://172.10.2.2:7449
networkConfig:
   clusterNetworkCIDR: 10.1.0.0/16
   hostSubnetLength: 8
   networkPluginName: ""
   serviceNetworkCIDR: 172.30.0.0/16
oauthConfig:
   assetPublicURL: https://172.10.2.2:7449/console/
   grantConfig:
      method: auto
   identityProviders:
   - challenge: true
   login: true
   name: anypassword
   provider:
      apiVersion: v1
      kind: AllowAllPasswordIdentityProvider
   masterPublicURL: https://172.10.2.2:7449/
   masterURL: https://172.10.2.2:7449/
   sessionConfig:
      sessionMaxAgeSeconds: 300
      sessionName: ssn
      sessionSecretsFile: ""
   tokenConfig:
      accessTokenMaxAgeSeconds: 86400
      authorizeTokenMaxAgeSeconds: 300
policyConfig:
   bootstrapPolicyFile: policy.json
   openshiftInfrastructureNamespace: openshift-infra
   openshiftSharedResourcesNamespace: openshift
projectConfig:
   defaultNodeSelector: ""
   projectRequestMessage: ""
   projectRequestTemplate: ""
   securityAllocator:
      mcsAllocatorRange: s0:/2
      mcsLabelsPerProject: 5
      uidAllocatorRange: 1000000000-1999999999/10000
routingConfig:
   subdomain: router.default.svc.cluster.local
serviceAccountConfig:
   managedNames:
   - default
   - builder
   - deployer
   
masterCA: ca.crt
   privateKeyFile: serviceaccounts.private.key
   privateKeyFile: serviceaccounts.private.key
   publicKeyFiles:
   - serviceaccounts.public.key
servingInfo:
   bindAddress: 0.0.0.0:8443
   certFile: master.server.crt
   clientCA: ca.crt
   keyFile: master.server.key
   maxRequestsInFlight: 0
   requestTimeoutSeconds: 3600

Düğüm yapılandırma dosyaları

allowDisabledDocker: true
apiVersion: v1
dnsDomain: cluster.local
dnsIP: 172.10.2.2
dockerConfig:
   execHandlerName: native
imageConfig:
   format: openshift/origin-${component}:${version}
   latest: false
kind: NodeConfig
masterKubeConfig: node.kubeconfig
networkConfig:
   mtu: 1450
   networkPluginName: ""
nodeIP: ""
nodeName: node1.example.com

podManifestConfig:
   path: "/path/to/pod-manifest-file"
   fileCheckIntervalSeconds: 30
servingInfo:
   bindAddress: 0.0.0.0:10250
   certFile: server.crt
   clientCA: node-client-ca.crt
   keyFile: server.key
volumeDirectory: /root/openshift.local.volumes

Düğüm yapılandırma dosyaları bu şekilde görünür. Bu yapılandırma dosyalarını yerleştirdikten sonra, ana ve düğüm sunucusu oluşturmak için aşağıdaki komutu çalıştırabiliriz.

$ openshift start --master-config = /openshift.local.config/master/master-
config.yaml --node-config = /openshift.local.config/node-<node_hostname>/node-
config.yaml

Düğümleri Yönetme

OpenShift'te, çoğunlukla OpenShift'teki tüm işlemleri gerçekleştirmek için kullanılan OC komut satırı yardımcı programımız var. Düğümleri yönetmek için aşağıdaki komutları kullanabiliriz.

Bir düğümü listelemek için

$ oc get nodes
NAME                             LABELS
node1.example.com     kubernetes.io/hostname = vklnld1446.int.example.com
node2.example.com     kubernetes.io/hostname = vklnld1447.int.example.com

Bir düğümle ilgili ayrıntıları açıklama

$ oc describe node <node name>

Bir düğümü silme

$ oc delete node <node name>

Bir düğümdeki kapsülleri listeleme

$ oadm manage-node <node1> <node2> --list-pods [--pod-selector=<pod_selector>] [-o json|yaml]

Bir düğümdeki kapsülleri değerlendirme

$ oadm manage-node <node1> <node2> --evacuate --dry-run [--pod-selector=<pod_selector>]

Yapılandırma Kimlik Doğrulaması

OpenShift master'da, kimlik doğrulamasını yönetmek için kullanılabilecek yerleşik bir OAuth sunucusu vardır. Tüm OpenShift kullanıcıları jetonu bu sunucudan alır ve bu da OpenShift API ile iletişim kurmalarına yardımcı olur.

OpenShift'te, ana yapılandırma dosyasıyla birlikte yapılandırılabilen farklı kimlik doğrulama düzeyi türleri vardır.

  • Hepsine izin ver
  • Hepsini inkar etmek
  • HTPasswd
  • LDAP
  • Temel kimlik doğrulama
  • Başlık isteyin

Ana yapılandırmayı tanımlarken, kullanmak istediğimiz politika türünü tanımlayabileceğimiz tanımlama politikasını tanımlayabiliriz.

Hepsine izin ver

Hepsine izin ver

oauthConfig:
   ...
   identityProviders:
   - name: Allow_Authontication
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: AllowAllPasswordIdentityProvider

Hepsini inkar etmek

Bu, tüm kullanıcı adlarına ve şifrelere erişimi engelleyecektir.

oauthConfig:
   ...
   identityProviders:
   - name: deny_Authontication
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: DenyAllPasswordIdentityProvider

HTPasswd

HTPasswd, kullanıcı adı ve parolayı şifrelenmiş bir dosya parolasına karşı doğrulamak için kullanılır.

Şifrelenmiş bir dosya oluşturmak için aşağıdaki komut verilmiştir.

$ htpasswd </path/to/users.htpasswd> <user_name>

Şifrelenmiş dosyayı kullanma.

oauthConfig:
   ...
   identityProviders:
   - name: htpasswd_authontication
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: HTPasswdPasswordIdentityProvider
         file: /path/to/users.htpasswd

LDAP Kimlik Sağlayıcı

Bu, LDAP sunucusunun kimlik doğrulamada önemli bir rol oynadığı LDAP kimlik doğrulaması için kullanılır.

oauthConfig:
   ...
   identityProviders:
   - name: "ldap_authontication"
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: LDAPPasswordIdentityProvider
         attributes:
            id:
            - dn
            email:
            - mail
            name:
            - cn
            preferredUsername:
            - uid
         bindDN: ""
         bindPassword: ""
         ca: my-ldap-ca-bundle.crt
         insecure: false
         url: "ldap://ldap.example.com/ou=users,dc=acme,dc=com?uid"

Temel Kimlik Doğrulama

Bu, kullanıcı adı ve parolanın doğrulanması, sunucudan sunucuya kimlik doğrulamasına karşı yapıldığında kullanılır. Kimlik doğrulama, temel URL'de korunur ve JSON biçiminde sunulur.

oauthConfig:
   ...
   identityProviders:
   - name: my_remote_basic_auth_provider
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: BasicAuthPasswordIdentityProvider
         url: https://www.vklnld908.int.example.com/remote-idp
         ca: /path/to/ca.file
         certFile: /path/to/client.crt
         keyFile: /path/to/client.key

Bir Hizmet Hesabını Yapılandırma

Hizmet hesapları, kimlik doğrulama için kullanıcı adı ve parolayı açığa çıkaran OpenShift API'ye erişmenin esnek bir yolunu sağlar.

Bir Hizmet Hesabını Etkinleştirme

Hizmet hesabı, kimlik doğrulama için genel ve özel anahtarlardan oluşan bir anahtar çifti kullanır. API kimlik doğrulaması, özel bir anahtar kullanılarak ve bir genel anahtara göre doğrulanarak yapılır.

ServiceAccountConfig:
   ...
   masterCA: ca.crt
   privateKeyFile: serviceaccounts.private.key
   publicKeyFiles:
   - serviceaccounts.public.key
   - ...

Hizmet Hesabı Oluşturma

Bir hizmet hesabı oluşturmak için aşağıdaki komutu kullanın

$ Openshift cli create service account <name of server account>

HTTP Proxy ile Çalışma

Üretim ortamının çoğunda, İnternete doğrudan erişim kısıtlanmıştır. Ya İnternete maruz kalmazlar ya da bir HTTP ya da HTTPS vekil sunucu aracılığıyla görünürler. OpenShift ortamında, bu proxy makine tanımı bir ortam değişkeni olarak ayarlanır.

Bu, altında bulunan ana ve düğüm dosyalarına bir proxy tanımı eklenerek yapılabilir. /etc/sysconfig. Bu, diğer uygulamalar için yaptığımız gibi.

Usta Makine

/ etc / sysconfig / openshift-master

HTTP_PROXY=http://USERNAME:[email protected]:8080/
HTTPS_PROXY=https://USERNAME:[email protected]:8080/
NO_PROXY=master.vklnld908.int.example.com

Düğüm Makinesi

/ etc / sysconfig / openshift-node

HTTP_PROXY=http://USERNAME:[email protected]:8080/
HTTPS_PROXY=https://USERNAME:[email protected]:8080/
NO_PROXY=master.vklnld908.int.example.com

Bittiğinde, ana ve düğüm makinelerini yeniden başlatmamız gerekiyor.

Docker Pull için

/ etc / sysconfig / docker

HTTP_PROXY = http://USERNAME:[email protected]:8080/
HTTPS_PROXY = https://USERNAME:[email protected]:8080/
NO_PROXY = master.vklnld1446.int.example.com

Proxy ortamında bir bölmeyi çalıştırmak için şu şekilde yapılabilir -

containers:
- env:
   - name: "HTTP_PROXY"
      value: "http://USER:PASSWORD@:10.0.1.1:8080"

OC ortam komutu, mevcut env'i güncellemek için kullanılabilir.

NFS ile OpenShift Depolama

OpenShift'te, kalıcı birim ve kalıcı birim talepleri kavramı kalıcı depolama oluşturur. Bu, ilk kalıcı birimin oluşturulduğu ve daha sonra aynı birimin talep edildiği temel kavramlardan biridir. Bunun için altta yatan donanımda yeterli kapasiteye ve disk alanına sahip olmamız gerekir.

apiVersion: v1
kind: PersistentVolume
metadata:
   name: storage-unit1
spec:
   capacity:
      storage: 10Gi
   accessModes:
   - ReadWriteOnce
   nfs:
      path: /opt
      server: 10.12.2.2
   persistentVolumeReclaimPolicy: Recycle

Ardından, OC create komutunu kullanarak Persistent Volume oluşturun.

$ oc create -f storage-unit1.yaml

persistentvolume " storage-unit1 " created

Oluşturulan birimi talep etmek.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
   name: Storage-clame1
spec:
   accessModes:
      - ReadWriteOnce
   resources:
      requests:
         storage: 5Gi

İddiayı oluşturun.

$ oc create -f Storage-claim1.yaml
persistentvolume " Storage-clame1 " created

Kullanıcı ve Rol Yönetimi

Kullanıcı ve rol yönetimi, kullanıcıları, erişimlerini ve farklı projelerdeki kontrollerini yönetmek için kullanılır.

Bir Kullanıcı Oluşturma

OpenShift'te yeni kullanıcılar oluşturmak için önceden tanımlanmış şablonlar kullanılabilir.

kind: "Template"
apiVersion: "v1"
parameters:
   - name: vipin
   required: true
objects:
   - kind: "User"
   apiVersion: "v1"
   metadata:
   name: "${email}"
   
- kind: "Identity"
   apiVersion: "v1"
   metadata:
      name: "vipin:${email}"
   providerName: "SAML"
   providerUserName: "${email}"
- kind: "UserIdentityMapping"
apiVersion: "v1"
identity:
   name: "vipin:${email}"
user:
   name: "${email}"

Kullanıcı oluşturmak için oc create –f <dosya adı> komutunu kullanın.

$ oc create –f vipin.yaml

OpenShift'te bir kullanıcıyı silmek için aşağıdaki komutu kullanın.

$ oc delete user <user name>

Kullanıcı Erişimini Sınırlandırma

ResourceQuotas ve LimitRanges, kullanıcı erişim düzeylerini sınırlamak için kullanılır. Küme üzerindeki bölmeleri ve kapsayıcıları sınırlamak için kullanılırlar.

apiVersion: v1
kind: ResourceQuota
metadata:
   name: resources-utilization
spec:
   hard:
      pods: "10"

Yukarıdaki yapılandırmayı kullanarak teklif oluşturma

$ oc create -f resource-quota.yaml –n –Openshift-sample

Kaynak teklifini açıklama

$ oc describe quota resource-quota  -n  Openshift-sample
Name:              resource-quota
Namespace:                              Openshift-sample
Resource           Used                  Hard
--------           ----                  ----
pods                3                    10

Kapsayıcı sınırlarının tanımlanması, konuşlandırılan kapsayıcılar tarafından kullanılacak kaynakları sınırlamak için kullanılabilir. Belirli nesnelerin maksimum ve minimum sınırlamalarını tanımlamak için kullanılırlar.

Kullanıcı projesi sınırlamaları

Bu, temel olarak bir kullanıcının herhangi bir zamanda sahip olabileceği proje sayısı için kullanılır. Temelde kullanıcı seviyelerini bronz, gümüş ve altın kategorilerinde tanımlayarak yapılırlar.

İlk olarak bir bronz, gümüş ve altın kategorisinin kaç tane projeye sahip olabileceğinin değerini taşıyan bir nesne tanımlamamız gerekiyor. Bunların master-confif.yaml dosyasında yapılması gerekir.

admissionConfig:
   pluginConfig:
      ProjectRequestLimit:
         configuration:
            apiVersion: v1
            kind: ProjectRequestLimitConfig
            limits:
            - selector:
               level: platinum
            - selector:
               level: gold
            maxProjects: 15
            - selector:
               level: silver
            maxProjects: 10
            - selector:
               level: bronze
            maxProjects: 5

Ana sunucuyu yeniden başlatın.

Bir kullanıcıyı belirli bir seviyeye atamak.

$ oc label user vipin level = gold

Gerekirse kullanıcıyı etiketin dışına taşımak.

$ oc label user <user_name> level-

Bir kullanıcıya rol ekleme.

$ oadm policy add-role-to-user 
      
        <user_name> 
      

Rolü bir kullanıcıdan kaldırma.

$ oadm policy remove-role-from-user 
      
        <user_name> 
      

Bir kullanıcıya küme rolü ekleme.

$ oadm policy add-cluster-role-to-user 
      
        <user_name> 
      

Bir kullanıcıdan bir küme rolünü kaldırma.

$ oadm policy remove-cluster-role-from-user 
      
        <user_name> 
      

Bir gruba bir rol eklemek.

$ oadm policy add-role-to-user 
      
        <user_name> 
      

Gruptan bir rol çıkarma.

$ oadm policy remove-cluster-role-from-user 
      
        <user_name> 
      

Bir gruba küme rolü ekleme.

$ oadm policy add-cluster-role-to-group 
      
        <groupname> 
      

Bir gruptan küme rolünü kaldırma.

$ oadm policy remove-cluster-role-from-group <role> <groupname>

Küme yönetimi için kullanıcı

Bu, kullanıcının bir kümenin oluşturulmasından başlayarak bir kümenin silinmesine kadar tam bir kümeyi yönetme yeteneğine sahip olduğu en güçlü rollerden biridir.

$ oadm policy add-role-to-user admin <user_name> -n <project_name>

Nihai güce sahip kullanıcı

$ oadm policy add-cluster-role-to-user cluster-admin <user_name>