Centos7 -- OpenShift 4 - OCP 之 CRC(Codeready Container)单机版安装
先获得运行CRC的虚机IP地址(注意:该IP地址是KVM使用的地址,只能在宿主机上访问到),然后将其设置到haproxy的配置中,最后重启haproxy服务。为了让远程节点能访问到CRC虚机中的域名,需要在运行CRC的宿主机上安装DNS服务,然后将远程节点的DNS指向CRC宿主机上。可以将以下内容保存在运行CRC虚机的宿主机上,然后使用非root用户按照shell运行,即可完成CRC下载、安装和远
参考:OpenShift 4 - CRC(Codeready Container)单机版
OpenShift / RHEL / DevSecOps 汇总目录
一、关于 CRC - Codeready Container(最新名称 OpenShift Local)
1.1 CRC功能定位
通常一套正式的OpenShift集群至少需要3个物理或虚拟节点,这对于一般技术人员学习产品或开发大多数应用显然是比较高的环境。为了降低OpenShift开发学习的门槛,Redhat为用户提供了一个可以单机运行的OpenShift(Codeready Container - CRC)环境。CRC是直接运行在虚拟机中,当我们下载虚拟机并启动后,一个OpenShift环境就运行起来了。
1.2 准备运行环境
1.2.1 运行环境要求
CRC是一个最小的OpenShift环境,运行过程需要的所有资源需要在线下载,因此他必须在一个能访问Internet的环境中运行。RedHat目前提供Linux-KVM、Mac-HyperKit和Windows-HyperV三种格式的CRC虚拟机文件,我们可以根据自己的环境下载对应的CRC文件。
另外你还需要一个 https://developers.redhat.com 的有效用户,用来下载允许 CRC 从 RedHat 网站拉取镜像的 pull secret 文件。
运行CRC的最低硬件环境如下,但是为了能够更好地运行,建议能提供更多的资源。
- 4 vCPUs
- 10 GB 空余内存
- 35 GB 存储
注意:如果运行 CRC 的宿主机也是一个虚拟机,需要打开虚拟化软件的嵌套功能,以允许在宿主虚拟机中运行CRC虚拟机、
如果使用Linux作为CRC的宿主机操作系统,建议使用 RHEL/CentOS 7.5 或更高版本(本文使用的是RHEL 7.8),并最好安装图形化桌面。如果使用其它 Linux,可参见“参考文档”。
CRC 4.11 安装的软件条件:
- Windows
Windows 10 Update(1709)或者更新版本,但是不包括 Windows 10 家庭版.
- macOS
macOS 10.12 Sierra或者更新版
- Linux
•CRC支持 Red Hat Enterprise Linux/CentOS 7.5 或者更新版
• Ubuntu 18.04 LTS 和 Debian 10 没有官方支持
1.2.2 创建用户
请用 root 用户完成以下操作。
创建一个用户(例如 “crc”),并将他加入到“wheel”组中(会自动拥有sudoer)。
$ useradd crc -G wheel
1.2.3 安装KVM虚拟化组件
RHEL/CentOS 的环境可以分别执行以下命令安装CRC所需要的 libvirt 和 NetworkManager 组件:
$ yum install -y virt-manager libvirt libvirt-python python-virtinst libvirt-client
$ yum install -y qemu-kvm qemu-img
$ yum install -y NetworkManager
如果使用 KVM虚拟机安装运行CRC,需要KVM虚拟机开启虚拟化支持,详情参考《在 Centos7 的KVM虚拟机上启用嵌套虚拟化》
1.3 下载CRC和Pull Secret
CRC和Pull Secret下载地址:console.redhat.com
1.3.1 下载CRC
1.3.2 下载Pull Secret
请用 crc 用户完成以下操作:
从https://mirror.openshift.com/pub/openshift-v4/clients/crc/latest/下载Linux、Mac和Windows平台的CRC虚拟机文件。本文使用的基于RHEL的Linux环境,因此下载 crc-linux-amd64.tar.xz 文件即可。
$ curl -o ~/crc-linux-amd64.tar.xz https://mirror.openshift.com/pub/openshift-v4/clients/crc/2.8.0/crc-linux-amd64.tar.xz
$ tar -xvf ~/crc-linux-amd64.tar.xz
$ cd ~/crc-linux-2.8.0-amd64
$ export PATH=$PATH:~/crc-linux-2.8.0-amd64
登录 https://cloud.redhat.com/openshift/install/pull-secret,然后下载pull secret到“~/crc-linux-2.6.0-amd64”目录下pull-secret.json文件。
二、安装运行CRC
请用 crc 用户完成以下操作。
2.1 第一次运行
可以用下命令查看所有crc的运行参数,并且设置相关参数。
$ crc config
$ crc config set cpus 8
$ crc config set memory 20480
$ crc config set disk-size 100
$ crc config set kubeadmin-password openshift
$ crc config set pull-secret-file pull-secret.json
$ crc config set enable-cluster-monitoring true
$ crc config set consent-telemetry no
$ crc config view
设置CRC运行环境,这一步会用下载的文件解压出VM运行文件。
$ crc setup
然后执行命令启动CRC的虚机,也可以在启动是指定运行参数,其中
- “-c”指的是使用cpu的数量;
- “-m”指定的虚机使用内存量,单位是MB;
- “-d”指定的虚机使用存储空间,单位是GB;
- ”-p“指定pull secret文件的。
2.1.1 常用的CRC命令:
$ crc start
$ crc start -c 8 -m 20480 -d 100 -p pull-secret.json
# 查看运行状态
$ crc status
# 输出:
CRC VM: Running
OpenShift: Running (v4.11.7)
Podman:
Disk Usage: 22.39GB of 42.4GB (Inside the CRC VM)
Cache Usage: 16.43GB
Cache Directory: /home/openshift/.crc/cache
# 查看登录信息
$ crc console --credentials
# 输出:
To login as a regular user, run 'oc login -u developer -p developer https://api.crc.testing:6443'.
To login as an admin, run 'oc login -u kubeadmin -p openshift https://api.crc.testing:6443'
# 查看ip
$ crc ip
# 输出:
192.168.130.11
注:
如果报错:
Error creating machine: Error in driver during machine creation: virError(Code=9, Domain=20, Message='操作失败: 使用 uuid crc 的域 '501538bf-d959-4767-9751-561d71283c50' 已存在'
解决办法:
将crc KVM虚拟机删除即可:
$ virsh list --all
$ virsh undefine crc
在CRC虚拟机启动完成后会显示以下提示,其中说明了缺省的kubeadmin用户、密码和API-Server的访问地址。
The server is accessible via web console at:
https://console-openshift-console.apps-crc.testing
Log in as administrator:
Username: kubeadmin
Password: openshift
Log in as user:
Username: developer
Password: developer
Use the 'oc' command line interface:
$ eval $(crc oc-env)
$ oc login -u developer https://api.crc.testing:6443
查看OpenShift的控制台访问地址。
$ crc console --url
2.1.2 常用的OC命令
1. 登录:
oc login
oc login -u kubeadmin -p openshift https://api.crc.testing:6443
1.1 查看project列表
oc projects
2. 创建一个新项目:
oc new-project ProjectName 创建一个项目(ProjectName新建的项目名)
3. 查看当前项目下的pod:
oc get pod
4. 查看project:
oc get project
5. 进入一个project:
oc project projectname
6. build 一份代码镜像: oc new-build (GitHub clone地址)
7. 再一次build bcname: oc start-build (代码更新之后可使用该命令再次build代码),bcname通过 oc get bc获取
8. 获取bcname: oc get bc
9. run一个镜像: oc run dcname –image=xxx ,dcname为项目名,xxx为全的镜像名,通过oc get is 查看
10. 将pod映射成一个service: oc expose dc dcname –port=xxx
11. 将一个服务映射出域名: oc expose svc svcname –hostname=xxx,将一个服务器映射成域名,支持http/https协议,svcname可以不写默认与dcname相同
12. 查看pod日志: oc logs -f podname
13. 查看pod详细状态信息: oc describe pod podname
14. 删除,获取,编辑: oc get/delete/edit pod/bc/dc/svc/route
15. 查看域名映射: oc get route
16. 暂时停止服务: oc scale –replicas=0 dc dcname
17. 查看运行dc的yaml: oc export dc dcname
18. 进入openshift中运行的pod: oc rsh podname bash
19. 获取token: oc whoami -t
20.下载文件到本地或者上传本地文件到pod:
$ oc rsync <source> <destination> [-c <container>]
For example, to copy a local directory to a pod directory:
$ oc rsync /home/user/source devpod1234:/src
Or to copy a pod directory to a local directory:
$ oc rsync devpod1234:/src /home/user/source
2.2 关闭和再次运行
关闭CRC虚拟机
$ crc stop
再次运行CRC的时候需要注意:如果在宿主机中配置了下文中的DNS服务,在重新启动CRC前需要先关闭DNS服务,在CRC启动成功后再运行DNS服务即可。
三、访问CRC的OpenShift
3.1 从本地访问
在安装完CRC后缺省只能通过以下命令在运行虚拟机的宿主机中访问到运行在虚拟机中的OpenShift。
$ oc login -u <USERNAME> -p <PASSWORD> https://api.crc.testing:6443
可以在宿主机中执行以下命令,获得访问OpenShift Web Console的地址。
$ crc console --url
以上OpenShift的api-server和web console地址中的域名是在运行CRC的宿主机上通过hosts文件解析的。我们可以查看宿主机的hosts文件确认增加了以下内容。注意以下CRC虚机使用的IP地址是固定的“192.168.130.11”。
$ cat /etc/hosts
192.168.130.11 api.crc.testing oauth-openshift.apps-crc.testing console-openshift-console.apps-crc.testing default-route-openshift-image-registry.apps-crc.testing
3.2 从远程访问
为了能够从远程的其它节点访问到运行在宿主机中的CRC,需要解决远程“访问路径”和“域名解析”问题。本文分别使用HAProxy和hosts解决上述问题。
请用root 用户完成以下操作。
3.2.1 打通访问路径
我们在宿主机上运行HAProxy,用它作为代理来打通外部远程节点和运行在CRC虚拟机中OpenShift的访问路径。请用root 用户完成以下操作。
a. 安装haproxy
$ yum install -y haproxy
配置haproxy。先获得运行CRC的虚机IP地址(注意:该IP地址是KVM使用的地址,只能在宿主机上访问到),然后将其设置到haproxy的配置中,最后重启haproxy服务。
$ export CRC_IP=$(crc ip)
$ tee /etc/haproxy/haproxy.cfg &>/dev/null << EOF
global
debug
defaults
log global
mode http
timeout connect 5000
timeout client 500000
timeout server 500000
frontend apps
bind 0.0.0.0:80
option tcplog
mode tcp
default_backend apps
backend apps
mode tcp
balance roundrobin
server webserver1 ${CRC_IP}:80 check
frontend apps_ssl
bind 0.0.0.0:443
option tcplog
mode tcp
default_backend apps_ssl
backend apps_ssl
mode tcp
balance roundrobin
option ssl-hello-chk
server webserver1 ${CRC_IP}:443 check
frontend api
bind 0.0.0.0:6443
option tcplog
mode tcp
default_backend api
backend api
mode tcp
balance roundrobin
option ssl-hello-chk
server webserver1 ${CRC_IP}:6443 check
EOF
$ systemctl restart haproxy
$ systemctl status haproxy
注意:如果haproxy启动报告“Starting frontend api: cannot bind socket [0.0.0.0:6443]”的错误,可以执行以下命令:
$ setsebool -P haproxy_connect_any=1
b. 配置宿主机的防火墙和SELinux。
# 永久关闭防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld
# 永久关闭selinux
$ setenforce 0
$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
$ systemctl start firewalld
$ firewall-cmd --add-port=80/tcp --permanent
$ firewall-cmd --add-port=6443/tcp --permanent
$ firewall-cmd --add-port=443/tcp --permanent
$ systemctl restart firewalld
$ yum -y install policycoreutils-python-utils
$ semanage port -a -t http_port_t -p tcp 6443
3.2.2 实现域名解析
为了让远程节点能访问到CRC虚机中的域名,需要在运行CRC的宿主机上安装DNS服务,然后将远程节点的DNS指向CRC宿主机上。请用root 用户完成以下操作。
a. 首先在运行CRC的宿主机上安装并配置DNS服务,使其能对“crc.testing”和“apps-crc.testing”域名解析。其中 “NAME_SERVER” 设为运行CRC虚拟机的宿主机地址。
$ yum -y install bind bind-utils
$ systemctl enable named --now
$ systemctl status named
$ systemctl stop named
$ systemctl start named
$ systemctl restart named
$ export NAME_SERVER=192.168.203.171
$ cp /etc/named.conf{,_bak}
$ sed -i -e "s/listen-on port.*/listen-on port 53 { any; };/" /etc/named.conf
$ sed -i -e "s/allow-query.*/allow-query { any; };/" /etc/named.conf
$ sed -i '/recursion yes;/a \
forward first; \
forwarders { 114.114.114.114; 8.8.8.8; };' /etc/named.conf
$ sed -i -e "s/dnssec-enable.*/dnssec-enable no;/" /etc/named.conf
$ sed -i -e "s/dnssec-validation.*/dnssec-validation no;/" /etc/named.conf
$ cat >> /etc/named.rfc1912.zones << EOF
zone "crc.testing" IN {
type master;
file "crc.testing.zone";
allow-update { none; };
};
zone "apps-crc.testing" IN {
type master;
file "apps-crc.testing.zone";
allow-update { none; };
};
EOF
$ cat > /var/named/crc.testing.zone << EOF
\$TTL 1D
@ IN SOA crc.testing. admin.crc.testing. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.crc.testing.
* IN A ${NAME_SERVER}
EOF
$ cat > /var/named/apps-crc.testing.zone << EOF
\$TTL 1D
@ IN SOA apps-crc.testing. admin.apps-crc.testing. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.apps-crc.testing.
* IN A ${NAME_SERVER}
EOF
$ systemctl restart named
b. 将远程节点的 dns 指向运行CRC的宿主机的地址(即“${NAME_SERVER}”)
这样远程节点就可以解析 “crc.testing” 和 “apps-crc.testing” 域名了。
$ vi /etc/resolv.conf
# 修改如下内容:
DNS1=10.111.101.133
3.2.3 从远程节点访问CRC的OpenShift
在远程节点上访问CRC中的OpenShift。
$ oc login -u <USERNAME> -p <PASSWORD> https://api.crc.ocp:6443
# use:
$ oc login -u kubeadmin -p openshift https://api.crc.testing:6443
在远程节点上用浏览器访问 https://console-openshift-console.apps-crc.testing/
3.3 登录运行 CRC 的虚拟机
运行CRC的虚拟机IP地址统一是192.168.130.11,我们可以用虚拟机对应的私钥登录这个虚拟机。
$ ssh -i /home/crc/.crc/machines/crc/id_ecdsa core@192.168.130.11
Red Hat Enterprise Linux CoreOS 49.83.202102090044-0
Part of OpenShift 4.11, RHCOS is a Kubernetes native operating system
managed by the Machine Config Operator (`clusteroperator/machine-config`).
WARNING: Direct SSH access to machines is not recommended; instead,
make configuration changes via `machineconfig` objects:
https://docs.openshift.com/container-platform/4.9/architecture/architecture-rhcos.html
---
[core@crc-l6qvn-master-0 ~]
四、自动安装配置CRC的Shell脚本
可以将以下内容保存在运行CRC虚机的宿主机上,然后使用非root用户按照shell运行,即可完成CRC下载、安装和远程访问的设置。
注意:
- 请用运行CRC虚机的宿主机的IP替换以下“<YOUR_IP>”。
- 请通过CRC_VERSION参数指定使用的CRC版本号。
- 请通过CPU、MEMORY_SIZE、DISK_SIZE参数设置CRC使用资源量(其中内存的单位是MB,存储单位是GB)。以下是最小的资源使用量。
- 以下shell脚本不包含准备libvirt环境。如需要安装,请参见本文开始部分。
自动安装脚本:
export NAME_SERVER=<YOUR_IP>
##将常用变量写入~/.bashrc文件
cat << EOF >> ~/.bashrc
export CRC_PATH=/apps/crc
export CRC_VERSION=2.8.0
export CPU=8
export MEMORY_SIZE=20480
export DISK_SIZE=100
export PATH=\${CRC_PATH}:\$PATH
EOF
source ~/.bashrc
#-----------------------------------------------------------------------------------------------------
##下载最新版CRC文件并解压到指定目录
sudo mkdir -p ${CRC_PATH}
sudo curl http://mirror.openshift.com/pub/openshift-v4/x86_64/clients/crc/latest/crc-linux-amd64.tar.xz -o ${CRC_PATH}/crc-linux-amd64.tar.xz
sudo tar -xvf ${CRC_PATH}/crc-linux-amd64.tar.xz -C ${CRC_PATH}
sudo mv ${CRC_PATH}/crc-linux-${CRC_VERSION}-amd64/* ${CRC_PATH}
sudo rm -rf ${CRC_PATH}/crc-linux-${CRC_VERSION}-amd64
sudo rm -f ${CRC_PATH}/crc-linux-amd64.tar.xz
sudo chmod -R 757 ${CRC_PATH}
#-----------------------------------------------------------------------------------------------------
##从redhat网站获得pull secret
read -p "Please input the pull secret string from https://cloud.redhat.com/openshift/install/pull-secret:" PULL_SECRET
echo ${PULL_SECRET} > ${CRC_PATH}/pull-secret.json
#-----------------------------------------------------------------------------------------------------
##可选,配置yum repo
cat << EOF > ~/myrepo.repo
[base]
name=CentOS-7 - Base
baseurl=http://mirrors.163.com/centos/7/os/x86_64/
gpgcheck=0
[updates]
name=CentOS-7 - Updates
baseurl=http://mirrors.163.com/centos/7/updates/x86_64/
gpgcheck=0
[extras]
name=CentOS-7 - Extras
baseurl=http://mirrors.163.com/centos/7/extras/x86_64/
gpgcheck=0
EOF
sudo mv ~/myrepo.repo /etc/yum.repos.d/
#-----------------------------------------------------------------------------------------------------
sudo yum -y install NetworkManager
sudo yum -y install policycoreutils-python
sudo yum -y install haproxy
#-----------------------------------------------------------------------------------------------------
##配置启动脚本并启动CRC
crc setup
echo "crc start -c \${CPU} -m \${MEMORY_SIZE} -d \${DISK_SIZE} -p \${CRC_PATH}/pull-secret.json" > ~/crc-start
echo "crc oc-env" >> ~/crc-start
echo "crc console --url" >> ~/crc-start
chmod +x ~/crc-start
~/crc-start
#-----------------------------------------------------------------------------------------------------
##设置firewall和SELinux
sudo systemctl stop firewalld
sudo semanage port -a -t http_port_t -p tcp 6443
#-----------------------------------------------------------------------------------------------------
##配置允许远程节点访问CRC的haproxy
sudo cp /etc/haproxy/haproxy.cfg{,.bak}
export CRC_IP=$(crc ip)
sudo tee /etc/haproxy/haproxy.cfg &>/dev/null <<EOF
global
debug
defaults
log global
mode http
timeout connect 5000
timeout client 5000
timeout server 5000
frontend apps
bind 0.0.0.0:80
option tcplog
mode tcp
default_backend apps
backend apps
mode tcp
balance roundrobin
server webserver1 $CRC_IP:80 check
frontend apps_ssl
bind 0.0.0.0:443
option tcplog
mode tcp
default_backend apps_ssl
backend apps_ssl
mode tcp
balance roundrobin
option ssl-hello-chk
server webserver1 $CRC_IP:443 check
frontend api
bind 0.0.0.0:6443
option tcplog
mode tcp
default_backend api
backend api
mode tcp
balance roundrobin
option ssl-hello-chk
server webserver1 $CRC_IP:6443 check
EOF
sudo systemctl restart haproxy
#-----------------------------------------------------------------------------------------------------
##配置允许远程节点访问CRC的内部DNS
sudo yum -y install bind bind-utils
sudo systemctl enable named --now
sudo cp /etc/named.conf{,_bak}
sudo sed -i -e "s/listen-on port.*/listen-on port 53 { any; };/" /etc/named.conf
sudo sed -i -e "s/allow-query.*/allow-query { any; };/" /etc/named.conf
sudo sed -i '/recursion yes;/a \
forward first; \
forwarders { 114.114.114.114; 8.8.8.8; };' /etc/named.conf
sudo sed -i -e "s/dnssec-enable.*/dnssec-enable no;/" /etc/named.conf
sudo sed -i -e "s/dnssec-validation.*/dnssec-validation no;/" /etc/named.conf
sudo cat >> /etc/named.rfc1912.zones << EOF
zone "crc.testing" IN {
type master;
file "crc.testing.zone";
allow-update { none; };
};
zone "apps-crc.testing" IN {
type master;
file "apps-crc.testing.zone";
allow-update { none; };
};
EOF
sudo cat > /var/named/crc.testing.zone << EOF
\$TTL 1D
@ IN SOA @ admin.crc.testing. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS dns.crc.testing.
* IN A ${NAME_SERVER}
EOF
sudo cat > /var/named/apps-crc.testing.zone << EOF
\$TTL 1D
@ IN SOA @ admin.apps-crc.testing. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS dns.apps-crc.testing.
* IN A ${NAME_SERVER}
EOF
sudo systemctl restart named
参考
https://access.redhat.com/documentation/en-us/red_hat_codeready_containers
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/virtualization_deployment_and_administration_guide/index
https://developers.redhat.com/content-gateway/rest/mirror/pub/openshift-v4/clients/crc/latest/
更多推荐
所有评论(0)