DO280 在线课程的笔记。
Openshift 是基于 k8s 的 paas 产品,基本概念与 k8s 差不多。 Openshift 使用 Project 划分不同的 namespace, 隔离不同的资源。
Operator
Openshift 4 引入了 Operator 的概念。Operator 可以帮助管理资源。
Operators usually define custom resources (CR) that store their settings and configurations. An OpenShift administrator manages an operator my editing its custom resources. The syntax of a custom resource is defined by a custom resource definition (CRD).
Operator 通过调用 kubernetes 的 api 来实现它的功能。不过直接调用底层 api 会比较麻烦,因此有一个 Operator Software Development Kit (Operator SDK) 来帮助开发 Operator.
Operator Life Cycle Manager (OLM) 负责管理 Operator 的生命周期,它本身也是一个 Operator.
安装 Openshift
Openshift 的安装方法分两种。 Full-Stack Automation 和 Pre-existing Infrastructure.
Full-Stack Automation 通常用于公有云环境。用户提供公有云的信息,例如AKSK. 安装程序会自动创建全套环境。
Pre-existing Infrastructure 适用与 bare-mental 或者 vmware 等环境,需要自行配置信息。
常用排查命令
登陆 OC
$ oc login -u kubeadmin -p MMTUc-TnXjo-NFyh3-aeWmC
查看集群版本相关信息
$ oc describe clusterversion
查看节点信息
查看实际资源使用情况
查看更详细的节点信息
查看 Operator 状态
查看节点日志
$ oc adm node-logs -u kubelet my-node-name
$ oc adm node-logs my-node-name
排查节点系统层面的信息(在节点上开一个shell)
sh-4.2# chroot /host
sh-4.2# systemctl is-active kubelet
排查 Container Engine
sh-4.2# chroot /host
sh-4.2# crictl ps
查看 Pod 的部署状态/报错
$ oc status
$ oc describe pod
$ oc describe
查看 container 的日志
$ oc logs my-pod-name -c my-container-name (如果有多个container,指定其中一个)
创建一个 Troubleshooting Pod.
oc debug 可以根据现有 pod/deployment 等环境,创建一个类似的 pod 用于排查。这个 pod 会提供一个 shell.
进入运行中的 Pod 进行排查 remote shell
$ oc cp /local/path my-pod-name:/container/path (从本地复制东西到 container)
$ oc port-forward my-pod-name local-port:remote-port
排查 OC 命令本身
$ oc whoami -t
认证配置
Openshift 支持多种 Identity Providers:
HTPasswd
Keystone
LDAP
GitHub or GitHub Enterprise
OpenID Connect
在 Openshift 安装完成后,会自动创建一个 kubeadmin 的超级用户。
配置 HTPasswd 的示例步骤如下。
$ htpasswd -b ~/DO280/labs/auth-provider/temp developer ${PASSWD}
$ oc login -u kubeadmin -p ${PASSWD} ${OCP4_MASTER_API}
$ oc create secret generic localusers --from-file htpasswd=/home/student/DO280/labs/auth-provider/temp -n openshift-config
$ oc adm policy add-cluster-role-to-user cluster-admin admin
$ oc get -o yaml oauth cluster > ~/DO280/labs/auth-provider/oauth.yaml
## add below config to the yaml.
apiVersion: config.openshift.io/v1
kind: OAuth
...output omitted...
spec:
identityProviders:
- htpasswd:
fileData:
name: localusers
mappingMethod: claim
name: myusers
type: HTPasswd
$ oc replace -f ~/DO280/labs/auth-provider/oauth.yaml
$ oc login -u admin -p ${RHT_OCP4_USER_PASSWD}
$ oc get identity
控制资源访问
Add/remove role
$ oc adm policy remove-cluster-role-from-user cluster-role username
who-can 命令可以看谁有权限做某个操作
例如,在 wordpress 这个 project 中,将 dev 用户加红色那个 basic-user 权限.
另外,对于应用的密钥等数据,可以用 secret 来存放和传递。示例:
$ oc create secret generic mysql \
> --from-literal user=myuser --from-literal password=redhat123 \
> --from-literal database=test_secrets --from-literal hostname=mysql
$ oc new-app --name mysql \
> --docker-image registry.access.redhat.com/rhscl/mysql-57-rhel7:5.7-47
$ oc get pods -w
mysql-1-xxxx 0/1 Error
$ oc set env dc/mysql --prefix MYSQL_ \
> --from secret/mysql
$ oc get pods
mysql-2-rqp77 1/1 Running 0 24s
网络配置
让公网能够访问到服务的最简单方法,是使用 expose 命令。
> --hostname todo.${RHT_OCP4_WILDCARD_DOMAIN}
$ oc get routes
openshift 里提供多种供外部访问的方式
Ingress (resource)
External load balancer (service type)
Service external IP (service type)
NodePort (service type)
Pod 调度
OpenShift Scheduler Algorithm 会决定 Pod 调度在哪个节点上。它分3步来选节点:
1. Filtering nodes.
首先会根据节点的资源情况,以及 Taint 的情况,过滤出可以使用的节点。
2. Prioritizing the filtered list of nodes.
然后,会根据 affinity 和 anti-affinity 规则,计算出各个节点的分数。
3. Selecting the best fit node.
选出分数最高的节点来使用。如果多个节点分数相同,则用 round-robin 的方式选择。
节点也可以打 Label, 根据 label 来选择使用什么节点。比如,可以将节点分为 prod, dev 等。
$ oc get node node2.us-west-1.compute.internal --show-labels
同样,可以对 machineset 设置 label. 在云环境中,通常一个可用区会有一个 machineset.
$ oc edit machineset ocp-qz7hf-worker-us-west-1b \
> -n openshift-machine-api
spec:
metadata:
creationTimestamp: null
labels:
env: dev //<-----
providerSpec:
在 deployment 的配置中,也可以指定 pod 被调度在什么节点上。
> '{"spec":{"template":{"spec":{"nodeSelector":{"env":"dev"}}}}}'
可以设置 pod 的 replica 的数量
伸缩集群
> machineset MACHINE-SET -n openshift-machine-api