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>