openshift3.11社区版部署

安装注意事项

 

1、保证能联网
2、开启Selinux
3、操作系统语言不能是中文
4、infra节点会自动部署router,lb不要放在infra节点上,所以80端口不能冲突
5、如果web console访问端口改成443,lb不能放一起,端口冲突
6、硬盘格式XFS才支持overlay2
7、如果lb和master在一个节点上,会有8443端口已被占用的问题,建议安装时lb不要放在master节点上
8、如果etcd放在master节点上,会以静态pod形式启动。如果放在node节点上,会以系统服务的形式启动。我在安装过程中,一个etcd放在了master上,另一个放在了node上,导致etcd启动失败。建议安装时etcd要么全放在master节点上,要么全放在node节点上。
9、安装过程中,直接安装了带有nfs持久存储的监控,需要提前安装java-1.8.0-openjdk-headless python-passlib,这一点官网没有提及,不提前装安装会报错。
10、docker 启用配置参数–selinux-enabled=false ,但是操作系统Selinux必须开启,否则安装报错

前奏

本篇基于openshift3.11进行的集群安装,安装环境是在VMWare16 pro上安装centos7.9虚拟机,一台master两台slave。通过该方式模拟实际服务器的集群搭建openshift
 
从OCP3.10开始,如果您使用RHEL作为主机的底层操作系统则使用RPM方法在该主机上安装OCP组件,在RHEL上使用RPM时,所有服务都通过包管理从外部源安装和更新,这些包修改了同一用户空间中主机的现有配置
如果您使用RHEL Atomic Host则在该主机上使用系统容器方法, 该方法使OCP的每个组件都作为一个容器,在一个独立的包中,使用主机的内核运行。更新后的新容器会替换您主机上的任何现有容器
这两种安装类型都为集群提供了相同的功能,但您使用的操作系统决定了您管理服务和主机更新的方式
 
从OCP3.10开始,Red Hat Enterprise Linux系统不再支持容器化安装方法
 
生产级硬件要求
master节点
在etcd集群单独部署时,高可用性OCP集群master节点需要满足最低要求:
每1000个pod具有1个CPU和1.5GB内存
2000个pod的OCP集群建议master节点是4个CPU内核和19GB内存
 
node节点
node节点的大小取决于其工作负载的预期大小。作为OCP集群管理员,您需要计算预期工作负载并增加大约10%的开销。对于生产环境请分配足够的资源,以便节点主机故障不会影响您的最大容量,| 超额调度node节点上的物理资源会影响 Kubernetes调度程序在pod放置期间的资源保证
 
 
 
 
安装过程分为5部分:
1、集群主从机环境准备
2、安装依赖包,提前安装使用Ansible安装OpenShift集群所依赖的第三方包
3、Ansible执行安装:使用Ansible Playbook进行自动化安装
4、OpenShift系统配置:在使用Ansible执行安装完成之后的系统配置。
5、测试问题处理

 

环境准备

  IP OS CPU Mem Disk
master.lab.example.com 172.16.186.110/24 CentOS7.9 2vCPU 6G 20G(OS) / 30G(Docker)
node1.lab.example.com 172.16.186.111/24 CentOS7.9 2vCPU 6G 20G(OS) / 30G(Docker)
node2.lab.example.com 172.16.186.112/24 CentOS7.9 2vCPU 6G 20G(OS) / 30G(Docker)

注:infra节点可单独部署,hosts中设置好,即可在/etc/ansible/hosts中加入infra.ocp.cn openshift_node_group_name='node-config-infra'

存储管理

目录 作用 规格 预期增长
/var/lib/openshift 仅在单主模式下用于etcd存储且etcd嵌入在atomic-openshift-master进程中 小于10GB 仅存储元数据(随着环境慢慢成长)
/var/lib/etcd 在多主模式下或当etcd由管理员独立时用于etcd存储 小于20GB 仅存储元数据(随着环境慢慢成长)
/var/lib/docker 当运行时为docker时这是挂载点, 用于活动容器运行时(包括 pod)和本地图像存储(不用于注册表存储)的存储。挂载点应由docker-storage管理而不是手动管理 当节点内存为16GB时为50GB,每增加8GB内存就增加20-25GB 增长受限于运行容器的容量
/var/lib/container 当运行时为CRI-O时这是挂载点,用于活动容器运行时(包括pod)和本地图像存储(不用于注册表存储)的存储 当节点内存为16GB时为50GB,每增加8GB内存就增加20-25GB 增长受限于运行容器的容量
/var/lib/origin/openshift.local.volumes 用于pod的临时卷存储。这包括在运行时挂载到容器中的任何外部内容。包括不受持久存储PV支持的环境变量、kube机密和数据卷 变化 如果需要存储的pod使用持久卷则最小化
如果使用临时存储这可快速增长
/var/logs 所有组件的日志文件 10~30GB 日志文件可以快速增长;大小可通过不断增长的磁盘来管理,也可用日志轮换来管理

安装

前期配置

# 关于所有节点的SELinux
[root@ * ~]# grep -v ^# /etc/selinux/config | grep -v ^$
SELINUX=enforcing       		# 官方文档推荐开启SELINUX,否则会导致安装失败
SELINUXTYPE=targeted
# 所有节点关闭防火墙
[root@ * ~]# systemctl stop firewalld && systemctl disable firewalld
# 修改hosts文件
[root@master ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.186.110  master.lab.example.com  master
172.16.186.111  node1.lab.example.com  node1
172.16.186.112  node2.lab.example.com  node2
 
[root@master ~]# for i in 1 2;do scp /etc/hosts root@172.16.186.11$i:/etc;done
 
# 配置免密登录
[root@master ~]# ssh-keygen -t rsa -P ''
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id master.lab.example.com
 
[root@master ~]# for i in {0..2};do ssh-copy-id 172.16.186.11$i;done
[root@master ~]# for i in {1..2};do ssh-copy-id node$i;done
[root@master ~]# for i in {1..2};do ssh-copy-id node$i.lab.example.com;done

 

安装依赖包

# 所有主机下安装OpenShift依赖的软件包
yum -y install wget git net-tools bind-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct bash-completion.noarch python-passlib NetworkManager vim
# 所有主机安装docker
yum -y install docker-1.13.1
# 所有主机配置docker使用的存储
vim /etc/sysconfig/docker-storage-setup
DEVS=/dev/nvme0n2
VG=DOCKER
SETUP_LVM_THIN_POOL=yes
DATA_SIZE="100%FREE"
 
 
[root@* ~]# rm -rf /var/lib/docker/
[root@* ~]# wipefs --all /dev/nvme0n2
 
# 就是创建vg、Thinpool、lv的过程
[root@* ~]# docker-storage-setup
INFO: Volume group backing root filesystem could not be determined
INFO: Writing zeros to first 4MB of device /dev/nvme0n2
记录了4+0 的读入
记录了4+0 的写出
4194304字节(4.2 MB)已复制,0.00452444 秒,927 MB/秒
INFO: Device node /dev/nvme0n2p1 exists.
  Physical volume "/dev/nvme0n2p1" successfully created.
  Volume group "DOCKER" successfully created
  Rounding up size to full physical extent 24.00 MiB
  Thin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data.
  Logical volume "docker-pool" created.
  Logical volume DOCKER/docker-pool changed.
 
[root@* ~]# lvs
  LV          VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  docker-pool DOCKER twi-a-t--- <29.93g             0.00   10.14  
 
 
[root@* ~]# cat > /etc/docker/daemon.json<<EOF
{
  "registry-mirrors" : [
      "https://registry.docker-cn.com",
      "https://docker.mirrors.ustc.edu.cn",
      "http://hub-mirror.c.163.com",
      "https://cr.console.aliyun.com/",
      "https://0trl8ny5.mirror.aliyuncs.com"
  ]
}
EOF
 
 
[root@* ~]# systemctl daemon-reload && systemctl restart docker && systemctl enable docker

 

master主机上安装Ansible

 

[root@master ~]# yum -y install epel-release
# 全局禁用EPEL存储库,以便在以后的安装步骤中不会意外使用它
[root@master ~]# sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
[root@master ~]# yum -y install centos-release-ansible-28.noarch
[root@master ~]# yum list ansible --showduplicates
[root@master ~]# yum -y install ansible-2.8.6            # ansible版本太高会报错
[root@master ~]# ansible --version
ansible 2.8.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
 
 
===================================== 备用 ======================================
# 下载ansible26
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-ansible26-1-3.el7.centos.noarch.rpm
# 安装依赖并安装
yum install -y centos-release-configmanagement
rpm -ivh centos-release-ansible26-1-3.el7.centos.noarch.rpm
# 下载ansible-2.6.5
wget https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.6.5-1.el7.ans.noarch.rpm
# 先yum安装ansible-2.6.5所需依赖
yum install -y python-jinja2 python-paramiko python-setuptools python-six python2-cryptography sshpass PyYAML
# 安装
rpm -ivh ansible-2.6.5-1.el7.ans.noarch.rpm
===============================================================================
 

安装/配置openshift

 

[root@master ~]# wget https://github.com/openshift/openshift-ansible/archive/refs/tags/openshift-ansible-3.11.764-1.tar.gz
[root@master ~]# tar -zxvf openshift-ansible-3.11.764-1.tar.gz
[root@master ~]# mv openshift-ansible-openshift-ansible-3.11.764-1/  openshift-ansible
[root@master ~]# cd openshift-ansible
[root@master openshift-ansible]# cp roles/openshift_repos/templates/CentOS-OpenShift-Origin311.repo.j2{,-bak}
[root@master openshift-ansible]# vim roles/openshift_repos/templates/CentOS-OpenShift-Origin311.repo.j2
[centos-openshift-origin311]
name=CentOS OpenShift Origin
# 改为aliyun的源
baseurl=http://mirrors.aliyun.com/centos/7/paas/x86_64/openshift-origin311/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-PaaS


# 编写Inventory文件
[root@master openshift-ansible]# vim /etc/ansible/hosts


# Create an OSEv3 group that contains the masters and nodes groups
 
[OSEv3:children]
 
#目前配置标准的三个角色
 
masters
 
nodes
 
etcd
 
 
 
# Set variables common for all OSEv3 hosts
 
[OSEv3:vars]
 
# SSH user, this user should allow ssh based auth without requiring a password
 
ansible_ssh_user=root
 
#使用origin社区版
 
openshift_deployment_type=origin
 
#指定安装版本
 
openshift_release=3.9
 
#openshift_node_group_name= master
 
 
#指定默认域名,访问的时候需要使用该域名,没有dns服务器,需要手动添加本地hosts文件
 
openshift_master_default_subdomain=master
 
 
 
#禁止磁盘、内存和镜像检查
 
openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability
 
 
 
#disk_availability:报错信息是推荐的master磁盘空间剩余量大于40GB。测试环境无法满足,跳过检测。
 
#memory_availability:报错信息是推荐的master内存为16GB,node内存为8GB,测试环境无法满足,跳过检测。
 
#docker_image_availability:报错信息是需要的几个镜像未找到,选择跳过,装完集群后,在使用的时候再自行下载。
 
#docker_storage:报错信息是推荐选择一块磁盘空间存储镜像,这里选择跳过。采用docker默认的方式存储镜像。
 
# uncomment the following to enable htpasswd authentication; defaults to DenyAllPasswordIdentityProvider
 
openshift_master_identity_providers=[{'name':'htpasswd_auth','login':'true','challenge':'true','kind':'HTPasswdPasswordIdentityProvider','filename':'/etc/origin/master/htpasswd'}]
 
 
#ntp时间同步
 
openshift_clock_enabled=true
 
 
 
#节点配额
 
openshift_node_kubelet_args={'pods-per-core': ['10']}
 
 
 
# host group for masters
 
[masters]
 
master openshift_schedulable=True
 
 
# host group for nodes, includes region info
 
[nodes]
 
master openshift_node_labels="{'region': 'infra'}"
 
node1 openshift_node_labels="{'region': 'infra', 'zone': 'default'}"
 
node2 openshift_node_labels="{'region': 'infra', 'zone': 'default'}"
master openshift_node_group_name='node-config-master'
node1 openshift_node_group_name='node-config-compute'
node2 openshift_node_group_name='node-config-compute'
 
 
 
[etcd]
 
master

部署前检测

这一步如报错需排错后运行多次

[root@master openshift-ansible]# cd
[root@master ~]# ansible-playbook  -i  /etc/ansible/hosts  /root/openshift-ansible/playbooks/prerequisites.yml
....
	....
PLAY RECAP *************************************************************************************************************************
localhost                  : ok=11   changed=0    unreachable=0    failed=0    skipped=5    rescued=0    ignored=0   
master                     : ok=94   changed=22   unreachable=0    failed=0    skipped=89   rescued=0    ignored=0   
node1                      : ok=65   changed=21   unreachable=0    failed=0    skipped=71   rescued=0    ignored=0   
node2                      : ok=65   changed=21   unreachable=0    failed=0    skipped=71   rescued=0    ignored=0   
 
 
INSTALLER STATUS *******************************************************************************************************************
Initialization  : Complete (0:01:33)

 

正式部署

# 提前创建密码保存文件,不然待会会报错
[root@master ~]# mkdir -p /etc/origin/master/
[root@master ~]# touch /etc/origin/master/htpasswd
 
[root@master ~]# ansible-playbook  -i  /etc/ansible/hosts  /root/openshift-ansible/playbooks/deploy_cluster.yml
....
	....
PLAY RECAP *************************************************************************************************************************
localhost                  : ok=11   changed=0    unreachable=0    failed=0    skipped=5    rescued=0    ignored=0   
master                     : ok=692  changed=221  unreachable=0    failed=0    skipped=1061 rescued=0    ignored=0   
node1                      : ok=123  changed=19   unreachable=0    failed=0    skipped=166  rescued=0    ignored=0   
node2                      : ok=123  changed=19   unreachable=0    failed=0    skipped=166  rescued=0    ignored=0   
 
 
INSTALLER STATUS *******************************************************************************************************************
Initialization               : Complete (0:00:11)
Health Check                 : Complete (0:00:04)
Node Bootstrap Preparation   : Complete (0:02:13)
etcd Install                 : Complete (0:00:12)
Master Install               : Complete (0:03:15)
Master Additional Install    : Complete (0:00:19)
Node Join                    : Complete (0:03:23)
Hosted Install               : Complete (0:00:29)
Cluster Monitoring Operator  : Complete (0:04:40)
Web Console Install          : Complete (0:02:19)
Console Install              : Complete (0:01:33)
Service Catalog Install      : Complete (0:04:53)
 
 
 
# 安装结果检查
[root@master ~]# oc get nodes
NAME                     STATUS    ROLES           AGE       VERSION
master.lab.example.com   Ready     master          1h        v1.11.0+d4cacc0
node1.lab.example.com    Ready     compute         1h        v1.11.0+d4cacc0
node2.lab.example.com    Ready     infra   	   1h        v1.11.0+d4cacc0
 
注:二个node节点的roles类型不对,需要将node2打上compute标签,因为它也是计算节点
[root@master ~]# oc label node node2.lab.example.com  node-role.kubernetes.io/compute=true
 
[root@master ~]# oc get nodes
NAME                     STATUS    ROLES           AGE       VERSION
master.lab.example.com   Ready     master          46m       v1.11.0+d4cacc0
node1.lab.example.com    Ready     compute         42m       v1.11.0+d4cacc0
node2.lab.example.com    Ready     compute,infra   42m       v1.11.0+d4cacc0
 
# 查看pods
[root@master ~]# oc get pods
NAME                       READY     STATUS    RESTARTS   AGE
docker-registry-1-t259n    1/1       Running   1          1h
registry-console-1-4bw98   1/1       Running   1          1h
router-6-rcxwv             1/1       Running   0          8m
 
# 查看svc
[root@master ~]# oc get svc
NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                   AGE
docker-registry    ClusterIP   172.30.162.101   <none>        5000/TCP                  1h
kubernetes         ClusterIP   172.30.0.1       <none>        443/TCP,53/UDP,53/TCP     2h
registry-console   ClusterIP   172.30.20.229    <none>        9000/TCP                  1h
router             ClusterIP   172.30.220.154   <none>        80/TCP,443/TCP,1936/TCP   1h
# 查看路由
[root@master ~]# oc get route
NAME               HOST/PORT                         PATH      SERVICES           PORT      TERMINATION   WILDCARD
docker-registry    docker-registry-default.master              docker-registry    <all>     passthrough   None
registry-console   registry-console-default.master             registry-console   <all>     passthrough   None
# 查看bc
[root@master ~]# oc get dc
NAME               REVISION   DESIRED   CURRENT   TRIGGERED BY
docker-registry    1          1         1         config
registry-console   1          1         1         config
router             6          1         1         config
# 查看版本
[root@master ~]# oc version
oc v3.11.0+62803d0-1
kubernetes v1.11.0+d4cacc0
features: Basic-Auth GSSAPI Kerberos SPNEGO
 
Server https://master.lab.example.com:8443
openshift v3.11.0+07ae5a0-606
kubernetes v1.11.0+d4cacc0
 
 
注: 现在/etc/origin/master/htpasswd还是空的,所以要先创建管理账号和普通账号
 
# 使用管理员登录集群并创建管理员账号
[root@master ~]# oc login -u system:admin
[root@master ~]# oc whoami 
system:admin
# 创建管理员账号
            格式:htpasswd -b /etc/origin/master/htpasswd  <用户名>  <密码>
[root@master ~]# htpasswd -b /etc/origin/master/htpasswd  admin  redhat
# 授权(集群级权限有点大,需要注意)
[root@master ~]# oc adm policy add-cluster-role-to-user cluster-admin admin
# 给某个用户添加角色
            格式: oc adm policy add-role-to-user <角色>  <用户名> -n <项目名>
[root@master ~]# oc adm policy add-role-to-user admin admin -n webapp
# 使用新用户登录集群
[root@master ~]# oc login -u admin -p redhat
Login successful.
 
You don't have any projects. You can try to create a new project, by running
 
    oc new-project <projectname>
# 确定"我是谁"
[root@master ~]# oc whoami 
admin
# 使用管理员创建项目并授权给admin用户
[root@master ~]# oc login -u system:admin
#  创建项目
[root@master ~]# oc new-project webapp
 
==================================================
# 删除用户
[root@master ~]# vim /etc/origin/master/htpasswd     # 将admin用户删除即可
[root@master ~]# oc delete user admin
==================================================

 

浏览器验证

账密: admin/redhat(也就是上面自己创建的账密)

管理员用户创建项目

注: system:admin用户是系统自带的用户,是权限最高的用户,不支持远程登录,只有在集群中能登录且该用户没有密码
 
[root@master ~]# oc whoami
system:admin
 
[root@master ~]# oc login -u admin -p redhat
[root@master ~]# oc whoami
admin             # 虽然也是admin但和上面的system:admin用户 !!!完全!!!不同
# 创建一个项目(在K8S中这一步相当于namespace)
[root@master ~]# oc new-project test
Now using project "test" on server "https://master.lab.example.com:8443".
 
You can add applications to this project with the 'new-app' command. For example, try:
 
    oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git
 
to build a new example application in Ruby.
 
# 创建应用(按上一步的回显提示进行)
			格式:oc new-app <image>:[tag]~<source code> [--name <container_name>]
[root@master ~]# oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git
....
	....
   Tags: builder, ruby, ruby25, rh-ruby25
 
    * An image stream tag will be created as "ruby-25-centos7:latest" that will track the source image
    * A source build using source code from https://github.com/sclorg/ruby-ex.git will be created
      * The resulting image will be pushed to image stream tag "ruby-ex:latest"
      * Every time "ruby-25-centos7:latest" changes a new build will be triggered
    * This image will be deployed in deployment config "ruby-ex"
    * Port 8080/tcp will be load balanced by service "ruby-ex"
      * Other containers can access this service through the hostname "ruby-ex"
--> Creating resources ...
    imagestream.image.openshift.io "ruby-25-centos7" created
    imagestream.image.openshift.io "ruby-ex" created
    buildconfig.build.openshift.io "ruby-ex" created
    deploymentconfig.apps.openshift.io "ruby-ex" created
    service "ruby-ex" created
--> Success
    Build scheduled, use 'oc logs -f bc/ruby-ex' to track its progress.
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose svc/ruby-ex' 
    Run 'oc status' to view your app.
 
 
# 查看各组件状态
[root@master ~]# oc get svc
NAME      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
ruby-ex   ClusterIP   172.30.15.243   <none>        8080/TCP   2m
 
[root@master ~]# oc get pod
ruby-ex-1-build   0/1   Init:Error   0    3m        # 这里错误我未修复,只为说明使用步骤
 
[root@master ~]# oc logs -f po/ruby-ex-1-build
[root@master ~]# oc describe pod
# 查看所有事件
[root@master ~]# oc get events
 
======================= 删除应用相关 ===========================
[root@master ~]# oc get all              # 获得所有bc、dc、is、svc
[root@master ~]# oc delete deploymentconfig test111
[root@master ~]# oc delete buildconfig test111
[root@master ~]# oc delete build test111-1             # test111-1是应用名
[root@master ~]# oc delete build test-1
[root@master ~]# oc delete imagestreams test111
[root@master ~]# oc delete svc test111
或者(以下一条等于上面6条)
[root@master ~]# oc delete all -l app=test111
=============================================================
 

 

部署应用

部署一个nginx为例,在default这个namespace下
创建yaml文件
oc  create deployment web --image=nginx:1.14 --dry-run -o yaml > nginx.yaml
 
# nginx.yaml内容如下
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: web
    spec:
      containers:
      - image: nginx:1.14
        name: nginx
        resources: {}
status: {}
 
 
oc apply -f nginx.yaml
此时会发现容器起不来,用docker logs查看对应节点上的容器日志会发现一堆Permission Denied,这是因为OpenShift默认不给root权限,而nginx是需要root权限的
参考:https://stackoverflow.com/questions/42363105/permission-denied-mkdir-in-container-on-openshift
 
 
将anyuid这个scc( Security Context Constraints)赋给default这个命名空间,再重新部署下就可以了
oc adm policy add-scc-to-user anyuid -z default
 
oc apply -f nginx.yaml

 

OC常用命令合集

# 获取集群所有节点
oc get nodes
# 查看对应节点详细信息,可以看到运行在该节点下的pod
oc describe node node-name
# 查看对应namespace下pod
oc get pods -n namespace-name
# 查看当前project下的所有资源
oc get all
# 查看登录在哪个project下
oc status
# 查看对应namespace下pod详情
oc get pods -o wide -n namespace-name
# 查看pod详细信息
oc describe pod pod-name -n namespace-name
# 获取对应namespace的limitrange配置文件
oc get limitrange -n namespace-name
# 查看配置文件详情
oc describe limitrange limitrange.config -n namespace-name
# 修改limitrange配置
oc edit limitrange limitrange.config -n namespace-name
# 切换到project
oc project project-name
# 为该project下default账户开启anyuid,可以使用root权限,一般是安装/运行某些软件时需要
oc adm policy add-scc-to-user anyuid -z default
# 删除default的anyuid权限
oc adm policy remove-scc-from-user anyuid -z default
# 查看该project下的pod
oc get pod
# 查看该project下的service
oc get service
# 查看该project下的Endpoints
oc get endpoints
# 重启pod
oc delete pod pod-name -n namespace-name
# 查看dc历史版本
oc rollout history DeploymentConfig/dc-name
# 回滚到5版本
oc rollout history DeploymentConfig/dc-name --revision=5
# 设置副本数为3
oc scale dc pod-name --replicas=3 -n namespace
# 设置自动伸缩最小2,最大10
oc autoscale dc dc-name --min=2 --max=10 --cpu-percent=80
# 查看scc
oc get scc
# 查看anyuid详细信息,user即包含已经开启anyuid的project
oc describe scc anyuid
# 查看集群管理员角色及权限
oc describe clusterrole.rbac
# 查看用户组及绑定的角色
oc describe clusterrolebinding.rbac
# 添加username为cluster-admin
oc adm policy add-cluster-role-to-user cluster-admin username
# 查看所有namespace的route
oc get routes --all-namespaces
# 查看pod log
oc logs -f pod-name
# 查看pod对应containerID
docker ps -a|grep pod-name
# 登录到container
docker exec -it containerID /bin/sh
# 创建project
oc new-project my-project
# 查看当前项目状态
oc status
# 查看server支持的api资源
oc api-resources
# 收集当前集群的状态信息
oc adm must-gather
# 查看pod资源状态
oc adm top pods
# 查看节点资源状态
oc adm top node
# 查看images使用情况
oc adm top images
# 标记node1为SchedulingDisabled
oc adm cordon node1
# 标记node1为unschedulable
oc adm manage-node <node1> --schedulable = false
# 标记node1为schedulable
oc adm manage-node node1 --schedulable
# 将node1进入维护模式
oc adm drain node1
# 删除node
oc delete node
# 查询CSR(certificate signing requests)
oc get csr
# 同意和拒绝CSR
oc adm certificate { approve | deny } csr-name
# approve所有csr
oc get csr|xargs oc adm certificate approve csr
# 设置自动approve csr
echo 'openshift_master_bootstrap_auto_approve=true' >> /etc/ansible/hosts
# 获取project
oc get project <projectname>
# 查看project信息
oc describe project projectname
# 查看pod-name yaml文件
oc get pod pod-name -o yaml
# 查看节点label
oc get nodes --show-labels
# 给node添加标签,pod也要有对应label(在第二层spec下添加nodeSelector),pod就会运行在指定的node上
oc label nodes node-name label-key=label-value
# 更新指定key值的label
oc label nodes node-name key=new-value --overwrite
# 删除指定key值的label
oc label nodes node-name key-
# 查看运行在某node上的所有pod
oc adm manage-node node-name --list-pods
# mark node as unschedulable
oc adm manage-node node-name --schedulable=false
# 使用命令行登录openshift,token是用你自己的账户在登录网址时生成的token
oc login --token=iz56jscHZp9mSN3kHzjayaEnNo0DMI_nRlaiJyFmN74 --server=https://console.qa.c.sm.net:8443
# 获取/查看token
TOKEN=$(oc get secret $(oc get serviceaccount default -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode )
# 获取/查看apiserver
APISERVER=$(oc config view --minify -o jsonpath='{.clusters[0].cluster.server}')
# 命令行访问API
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
# 使用命令行登录pod
oc rsh pod-name
# 查看当前登录的服务地址
oc whoami --show-server
# 查看当前登录账户
oc whoami
# 查看dc(deployment config)
oc get dc -n namespace 
# 查看deploy
oc get deploy -n namespace
# 编辑deploy yaml文件
oc edit deploy/deployname -o yaml -n namespace
# 查看cronjob
oc get cronjob
# 编辑cronjob
oc edit cronjob/cronjob-name -n namespace-name
# 查看cronjob
oc describe cm/configmap-name -n namespace-name
# 查询configmap
oc get configmap -n namespace-name
# 查询configmap
oc get cm -n namespace-name
# 查看集群pod网段规划
cat /etc/origin/master/master-config.yaml|grep cidr
# 编辑VM yaml文件
oc edit vm appmngr54321-poc-msltoibh -n appmngr54321-poc -o yaml
# 获取sa-name的token
oc serviceaccounts get-token sa-name
# 使用token登录
oc login url --token=token
# 扩展pod副本数量
oc scale deployment deployment-name --replicas 5
# 查看config
oc config view
# get api versions
oc api-versions
# get api-resources
oc api-resources
# 查询HPA
oc get hpa --all-namespaces
# 查看HPA,可以看到Metrics,Events
oc describe hpa/hpaname -n namespace
# 创建sa
oc create serviceaccount caller
# 赋予cluster-admin权限
oc adm policy add-cluster-role-to-user cluster-admin -z caller
# get sa token
oc serviceaccounts get-token caller
# 获取kubeconfig文件位置
echo $KUBECONFIG
# 根据labelselector筛选cm
oc get cm --all-namespaces -l app=deviation
# 查询pod CPU/mem usage,openshift4.X适用
oc describe PodMetrics podname
# 查看shortnames、apiGroup、verbs
oc api-resources -o wide
# 按selector删除
oc delete pod --selector logging-infra=fluentd
# watch 某个pod状态
oc get pods -n logger -w
# 查看资源对象的定义
oc explain pv.spec
# 查看MutatingWebhook
oc get MutatingWebhookConfiguration
# 查看ValidatingWebhook
oc get ValidatingWebhookConfiguration
# 给validatingwebhook注入CA
oc annotate validatingwebhookconfigurations <validating_webhook_name> service.beta.openshift.io/inject-cabundle=true
# 给mutatingwebhook注入CA
oc annotate mutatingwebhookconfigurations <mutating_webhook_name> service.beta.openshift.io/inject-cabundle=true
# 根据label查询pv
oc get pv --selector=='path=testforocp'
# 根据自定义annotations查询,返回cm name
oc get cm --all-namespaces -o=jsonpath='{.items[?(@..metadata.annotations.cpuUsage=="0")].metadata.name}'
ns=$(oc get cm --selector='app=dev' --all-namespaces|awk '{print $1}'|grep -v NAMESPACE)
for i in $ns;do oc get cm dev -oyaml -n $i >> /tmp/test.txt; done;
 

 

posted @ 2022-09-28 22:46  liuhuayiye  阅读(62)  评论(0编辑  收藏  举报