首页 > 其他分享 >Openshift 3.11单机版 离线安装

Openshift 3.11单机版 离线安装

时间:2024-09-01 23:25:40浏览次数:4  
标签:单机版 service 3.11 离线 docker kube root openshift pod

Openshift 3.11单机版 离线安装

前置条件

  • 虚拟机: 建议系统内存>=6G,CPU>=4。
  • 镜像仓库:在虚拟机上能够访问到该镜像仓库,如果没有,推荐使用harbor自建。
  • docker:虚拟机上需要安装docker,这里使用的是18.09版本。离线安装可参考 docker 离线安装 或自行下载rpm包安装。

安装步骤

一、前置准备
1、关闭SELINUX
setenforce 0
sed -i  "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config
2、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
3、设置IP转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
modprobe br_netfilter
sysctl -p
4、修改docker配置文件

编辑 /etc/docker/daemon.json 文件

{

  "exec-opts": [
      "native.cgroupdriver=systemd"
   ],
  "insecure-registries":["harbor.dev.com"]

}

其中 insecure-registries 需要修改为使用的镜像仓库的地址,这是为了拉取镜像时避免由于证书认证问题导致拉取失败。

重启 docker

systemctl daemon-reload
systemctl restart docker
二、安装openshift
1、下载openshift

下载地址
image-dtga.png

2、上传至/opt目录解压
mv openshift-origin-server-v3.11.0-0cbc58b-linux-64bit.tar.gz /opt
cd /opt
tar -zxvf openshift-origin-server-v3.11.0-0cbc58b-linux-64bit.tar.gz
3、加入环境变量
# 目录太长,创建一个软连接
ln -s openshift-origin-server-v3.11.0-0cbc58b-linux-64bit /opt/openshift
# 加入环境变量
PATH=$PATH:/opt/openshift/
# 加载环境变量
source /etc/profile
4、下载镜像

在联网的机器上拉取如下镜像

docker pull docker.io/openshift/origin-control-plane:v3.11
docker pull docker.io/openshift/origin-hypershift:v3.11
docker pull docker.io/openshift/origin-node:v3.11
docker pull docker.io/openshift/origin-cli:v3.11
docker pull docker.io/openshift/origin-hyperkube:v3.11
docker pull docker.io/openshift/origin-pod:v3.11
docker pull docker.io/openshift/origin-deployer:v3.11
docker pull docker.io/openshift/origin-haproxy-router:v3.11
docker pull docker.io/openshift/origin-docker-registry:v3.11
docker pull docker.io/openshift/origin-web-console:v3.11
docker pull docker.io/openshift/origin-service-serving-cert-signer:v3.11

镜像拉取完成后将这些镜像上传至前置条件中准备的镜像仓库中,上传完成后,镜像的地址如下

swr.cn-global-3.labcloud.com/other/origin-control-plane:v3.11
# 如果你使用的是harbor,可能如下
<harbor~domain>/<project>/origin-control-plane:v3.11
4、启动集群
# 先创建一个目录,用于存放集群的配置文件
mkdir openshiftconfig
# 启动集群
oc cluster up --skip-registry-check=true --public-hostname="openshift.origin.hcs.com" --base-dir=/root/openshiftconfig

其中:--skip-registry-check=true 表示 Skip Docker daemon registry check

      `--public-hostname` 表示对外访问的域名,需要在`hosts` 中配置域名对应的IP

      `--base-dir` 表示集群的配置的文件在宿主机存储的位置,一开始是空的,集群启动之后里面才有文件
5、修改组件使用的镜像地址
[root@master ~]# oc cluster up --public-hostname="openshift.origin.hcs.com" --skip-registry-check=true --base-dir=/root/openshiftconfig/
Getting a Docker client ...
Checking if image openshift/origin-control-plane:v3.11 is available ...
Creating shared mount directory on the remote host ...
Determining server IP ...
Checking if OpenShift is already running ...
Checking for supported Docker version (=>1.22) ...
Checking if required ports are available ...
Checking if OpenShift client is configured properly ...
Checking if image openshift/origin-control-plane:v3.11 is available ...
Starting OpenShift using openshift/origin-control-plane:v3.11 ...
I0709 09:15:51.780704 4175900 config.go:40] Running "create-master-config"
I0709 09:15:53.858416 4175900 config.go:46] Running "create-node-config"
I0709 09:15:54.971157 4175900 flags.go:30] Running "create-kubelet-flags"
I0709 09:15:55.523592 4175900 run_kubelet.go:49] Running "start-kubelet"
I0709 09:15:55.754490 4175900 run_self_hosted.go:181] Waiting for the kube-apiserver to be ready ...

启动之后当出现 Waiting for the kube-apiserver to be ready ,使用 docker ps 命令查看启动的容器

image-ddoo.png

找到镜像为 origin-node 容器,进入该容器内部

docker exec -it 0fc0e967b6dd bash

如下进入 pod-manifests目录

[root@master ~]# docker exec -it 0fc0e967b6dd bash
[root@master origin]# ll
total 12
drwxr-xr-x 3 root root 4096 Jul  9 01:15 cluster-up
drwxr-xr-x 4 root root 4096 Jul  9 01:15 openshift.local.config
drwx------ 2 root root 4096 Jul  9 01:15 pod-manifests

会发现有4个 podyaml 文件

[root@master pod-manifests]# ll
total 16
-rw------- 1 root root 1241 Jul  9 01:15 apiserver.yaml
-rw------- 1 root root  897 Jul  9 01:15 etcd.yaml
-rw------- 1 root root 1700 Jul  9 01:15 kube-controller-manager.yaml
-rw------- 1 root root 1061 Jul  9 01:15 kube-scheduler.yaml

将这4个文件中 image 的拉取地址修改为你自己的镜像仓库的地址:

sed -i 's#openshift/#harbor.dev.com/other/#' apiserver.yaml
sed -i 's#openshift/#harbor.dev.com/other/#' etcd.yaml
sed -i 's#openshift/#harbor.dev.com/other/#' kube-controller-manager.yaml
sed -i 's#openshift/#harbor.dev.com/other/#' kube-scheduler.yaml

注意:上述 harbor.dev.com/other/ 请替换为你自己的仓库地址,并且将镜像设置为公开的

修改完成之后,你会发现大概走到这一步

········
I0709 09:15:55.754490 4175900 run_self_hosted.go:181] Waiting for the kube-apiserver to be ready ...
I0709 09:17:00.767259 4175900 interface.go:26] Installing "kube-proxy" ...
I0709 09:17:00.767296 4175900 interface.go:26] Installing "kube-dns" ...
I0709 09:17:00.767305 4175900 interface.go:26] Installing "openshift-service-cert-signer-operator" ...
I0709 09:17:00.767311 4175900 interface.go:26] Installing "openshift-apiserver" ...
I0709 09:17:00.767377 4175900 apply_template.go:81] Installing "openshift-apiserver"
I0709 09:17:00.767403 4175900 apply_template.go:81] Installing "kube-dns"
I0709 09:17:00.767407 4175900 apply_template.go:81] Installing "openshift-service-cert-signer-operator"
I0709 09:17:00.767449 4175900 apply_template.go:81] Installing "kube-proxy"
I0709 09:17:02.552941 4175900 interface.go:41] Finished installing "kube-proxy" "kube-dns" "openshift-service-cert-signer-operator" "openshift-apiserver"

到这里之后,集群已经能通过 APIoc/kubectl 命令行查看集群状态了,但还不够,还需要修改上述 "kube-proxy" "kube-dns" "openshift-service-cert-signer-operator" "openshift-apiserver" 组件使用的镜像地址。


接下来,将 kubeconfig 的配置文件拷贝到 /root/.kube 目录下

cp /root/openshiftconfig/kube-apiserver/admin.kubeconfig /root/.kube/config

其中: /root/openshiftconfig 就是集群启动时指定的 base-dir参数

执行命令 kubectl get all --all-namespaces

NAMESPACE                  NAME                                                          READY     STATUS              RESTARTS   AGE
kube-dns                   pod/kube-dns-6d7l5                                            0/1       ContainerCreating   0          1s
kube-proxy                 pod/kube-proxy-z9kpf                                          0/1       ContainerCreating   0          1s
openshift-apiserver        pod/openshift-apiserver-k26p5                                 0/1       ContainerCreating   0          1s
openshift-core-operators   pod/openshift-service-cert-signer-operator-6d477f986b-ccclz   0/1       ContainerCreating   0          1s

NAMESPACE             NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
default               service/kubernetes   ClusterIP   172.30.0.1       <none>        443/TCP         51s
kube-dns              service/kube-dns     ClusterIP   172.30.0.2       <none>        53/UDP,53/TCP   45s
openshift-apiserver   service/api          ClusterIP   172.30.158.113   <none>        443/TCP         45s

NAMESPACE             NAME                                 DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
kube-dns              daemonset.apps/kube-dns              1         1         0         1            0           <none>          45s
kube-proxy            daemonset.apps/kube-proxy            1         1         0         1            0           <none>          46s
openshift-apiserver   daemonset.apps/openshift-apiserver   1         1         0         1            0           <none>          46s

NAMESPACE                  NAME                                                     DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
openshift-core-operators   deployment.apps/openshift-service-cert-signer-operator   1         1         1            0           45s

NAMESPACE                  NAME                                                                DESIRED   CURRENT   READY     AGE
openshift-core-operators   replicaset.apps/openshift-service-cert-signer-operator-6d477f986b   1         1         0         1s

可以看到,像 dns、proxy、openshift-apiserver 等这些 pod 并没有正常启动

解决方式:使用 kubectl edit 命令修改部署的 yaml 文件,如下:

kubectl edit daemonset.apps/kube-dns  -n kube-dns

修改其中的 image部分,将其修改为自己的镜像仓库的地址。对其余三个依次重复此步骤修改。

修改完成后,如果发现pod还没正常运行,就将原来的pod删除,如 kubectl delete pod/kube-dns-6d7l5 -n kube-dns, 删除后pod重建就可以了



解决完上述问题,大概 会走到这一步

··········
I0709 09:21:18.569265 4175900 apply_list.go:67] Installing "sample-templates/cakephp quickstart"
I0709 09:21:18.569360 4175900 apply_list.go:67] Installing "sample-templates/postgresql"
I0709 09:21:22.051740 4175900 interface.go:41] Finished installing "sample-templates/postgresql" "sample-templates/cakephp quickstart" "sample-templates/dancer quickstart" "sample-templates/django quickstart" "sample-templates/rails quickstart" "sample-templates/sample pipeline" "sample-templates/mysql" "sample-templates/mariadb" "sample-templates/nodejs quickstart" "sample-templates/jenkins pipeline ephemeral" "sample-templates/mongodb"
I0709 09:25:46.089004 4175900 interface.go:41] Finished installing "openshift-router" "sample-templates" "persistent-volumes" "centos-imagestreams" "openshift-image-registry" "openshift-web-console-operator"

到这里又有组件因镜像拉取不到而卡住了,解决方式和上面一致,这里就不再赘述了,将有问题的 deploymentdaemonset 镜像地址修改正确即可。

NAMESPACE                       NAME                                                         READY     STATUS         RESTARTS   AGE
default                         pod/persistent-volume-setup-rd264                            1/1       Running        0          20s
kube-dns                        pod/kube-dns-trczh                                           1/1       Running        0          1m
kube-proxy                      pod/kube-proxy-4d4x6                                         1/1       Running        0          56s
kube-system                     pod/kube-controller-manager-localhost                        1/1       Running        0          3m
kube-system                     pod/kube-scheduler-localhost                                 1/1       Running        0          3m
kube-system                     pod/master-api-localhost                                     1/1       Running        0          3m
kube-system                     pod/master-etcd-localhost                                    1/1       Running        0          3m
openshift-apiserver             pod/openshift-apiserver-db2sv                                1/1       Running        0          2m
openshift-controller-manager    pod/openshift-controller-manager-6fgcc                       0/1       ErrImagePull   0          19s
openshift-core-operators        pod/openshift-service-cert-signer-operator-896576577-b24wz   1/1       Running        0          1m
openshift-core-operators        pod/openshift-web-console-operator-664b974ff5-b8hd7          0/1       ErrImagePull   0          16s
openshift-service-cert-signer   pod/apiservice-cabundle-injector-8ffbbb6dc-k948s             1/1       Running        0          1m
openshift-service-cert-signer   pod/service-serving-cert-signer-668c45d5f-brj8j              1/1       Running        0          1m

NAMESPACE                       NAME                                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                   AGE
default                         service/docker-registry               ClusterIP   172.30.1.1       <none>        5000/TCP                  18s
default                         service/kubernetes                    ClusterIP   172.30.0.1       <none>        443/TCP                   4m
default                         service/router                        ClusterIP   172.30.183.80    <none>        80/TCP,443/TCP,1936/TCP   17s
kube-dns                        service/kube-dns                      ClusterIP   172.30.0.2       <none>        53/UDP,53/TCP             4m
openshift-apiserver             service/api                           ClusterIP   172.30.158.113   <none>        443/TCP                   4m
openshift-service-cert-signer   service/service-serving-cert-signer   ClusterIP   172.30.73.95     <none>        443/TCP                   1m

NAMESPACE                      NAME                                          DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
kube-dns                       daemonset.apps/kube-dns                       1         1         1         1            1           <none>          4m
kube-proxy                     daemonset.apps/kube-proxy                     1         1         1         1            1           <none>          4m
openshift-apiserver            daemonset.apps/openshift-apiserver            1         1         1         1            1           <none>          4m
openshift-controller-manager   daemonset.apps/openshift-controller-manager   1         1         0         1            0           <none>          20s

NAMESPACE                       NAME                                                     DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
openshift-core-operators        deployment.apps/openshift-service-cert-signer-operator   1         1         1            1           4m
openshift-core-operators        deployment.apps/openshift-web-console-operator           1         1         1            0           17s
openshift-service-cert-signer   deployment.apps/apiservice-cabundle-injector             1         1         1            1           1m
openshift-service-cert-signer   deployment.apps/service-serving-cert-signer              1         1         1            1           1m

注意:这里修改镜像地址要快速,否则可能会超时失败(猜测)



全部修改完成后,等待一段时间就会出现如下提示,表明安装成功。


Login to server ...
Creating initial project "myproject" ...
Server Information ...
OpenShift server started.

The server is accessible via web console at:
    https://openshift.origin.hcs.com:8443

You are logged in as:
    User:     developer
    Password: <any value>

To login as administrator:
    oc login -u system:admin

6、登录验证

将域名写到本地 hosts 文件后,浏览器中打开 https://openshift.origin.hcs.com:8443

输入用户名密码,登录,点登录后可能会跳转到 https://127.0.0.1:8443,直接在浏览器地址栏将 127.0.0.1 修改为正确的IP地址即可。

登录成功之后也可能会出现如下的 error invalid request,无需关注,点击左上角的OKD图标即可,跳转之后就正常了。

image.png

7、部署验证

部署一个无状态应用测试一下

kind: Deployment
apiVersion: apps/v1
metadata:
  name: tomcat
  namespace: hello-admin
  labels:
    appgroup: ''
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
      version: v1
  template:
    metadata:
      labels:
        app: tomcat
        version: v1
    spec:
      containers:
        - name: container-1
          image: swr.cn-global-3.labcloud.com/migration4cce/tomcat:v11
          resources:
            limits:
              cpu: 100m
              memory: 100Mi
            requests:
              cpu: 100m
              memory: 100Mi
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
      dnsPolicy: ClusterFirst
      securityContext: {}
      imagePullSecrets:
        - name: default-secret

部署如果出现如下错误,可能是 docker 的运行时 runc 版本太低了,需要更新 runc 的版本

Events:
  Type     Reason     Age               From                Message
  ----     ------     ----              ----                -------
  Normal   Scheduled  2m                default-scheduler   Successfully assigned default/tomcat-68b89bb4d7-pg7lt to localhost
  Normal   Pulling    2m                kubelet, localhost  pulling image "swr.cn-global-3.labcloud.com/migration4cce/tomcat:v11"
  Normal   Pulled     2m                kubelet, localhost  Successfully pulled image "swr.cn-global-3.labcloud.com/migration4cce/tomcat:v11"
  Normal   Created    58s (x5 over 2m)  kubelet, localhost  Created container
  Warning  Failed     58s (x5 over 2m)  kubelet, localhost  Error: failed to start container "container-1": Error response from daemon: OCI runtime create failed: container_linux.go:330: starting container process caused "process_linux.go:284: applying cgroup configuration for process caused \"No such device or address\"": unknown
  Normal   Pulled     58s (x4 over 2m)  kubelet, localhost  Container image "swr.cn-global-3.labcloud.com/migration4cce/tomcat:v11" already present on machine
  Warning  BackOff    27s (x9 over 2m)  kubelet, localhost  Back-off restarting failed container

查找一下 runc 的位置

[root@master ~]# which runc
/usr/bin/runc

下载 runc https://github.com/opencontainers/runc/releases/download/v1.1.5/runc.amd64

上传至服务器

# 先备份一下原来的runc
cp /usr/bin/runc /root/runc.bak
# 覆盖旧的runc
mv /root/runc.amd64 /usr/bin/runc
chmod 755 /usr/bin/runc

查看一下 runc 的版本

[root@master ~]# runc --version
runc version 1.1.5
commit: v1.1.5-0-gf19387a6
spec: 1.0.2-dev
go: go1.17.10
libseccomp: 2.5.4

然后删除原来的 deployment, 重新部署一下

kubectl delete -f tomcat.yaml
kubectl apply -f tomcat.yaml
[root@master ~]# kubectl get pod -n hello-admin
NAME                      READY     STATUS    RESTARTS   AGE
tomcat-68b89bb4d7-9sqlz   1/1       Running   0          4h

以下是 OpenShift 3.x 版本与 Kubernetes 版本的对应关系:
OpenShift 3.6 - 基于 Kubernetes 1.6
OpenShift 3.7 - 基于 Kubernetes 1.7
OpenShift 3.9 - 基于 Kubernetes 1.9
OpenShift 3.10 - 基于 Kubernetes 1.10
OpenShift 3.11 - 基于 Kubernetes 1.11

在 OpenShift 3.11 中,system:admin 用户通常是通过客户端证书认证登录的,而不是通过 OAuth 令牌。这也是为什么您在使用 oc whoami -t 命令时会遇到“no token is currently in use for this session”的错误。对于通过证书认证的 system:admin,没有 OAuth 令牌。

如何获取 OAuth 令牌

如果您需要生成具有管理员权限的 OAuth 令牌,可以创建一个具有足够权限的服务账户(Service Account),然后为该服务账户创建一个 token。以下是步骤:

  1. 创建服务账户

    oc create sa admin-sa
    
    
  2. 为服务账户绑定权限
    为服务账户绑定一个高权限的 ClusterRole,例如 cluster-admin

    oc adm policy add-cluster-role-to-user cluster-admin -z admin-sa
    
  3. 获取服务账户的 token
    生成服务账户的 token,并获取它的值:

    oc serviceaccounts get-token admin-sa
    
    

    该命令将返回一个长字符串,即新创建的服务账户的 OAuth 令牌。

  4. 使用服务账户的 token 登录
    使用获取的 token 登录 OpenShift:

    oc login https://openshift3.origin.hcs.com:8443 --token=<admin-sa-token>
    
    

    <admin-sa-token> 替换为步骤 3 中获取的 token。

标签:单机版,service,3.11,离线,docker,kube,root,openshift,pod
From: https://www.cnblogs.com/xxjyy/p/18391936

相关文章

  • 程序设计训练3.11数码管
    程序设计训练3.11数码管【问题描述】液晶数码管用七笔阿拉数字表示的十个数字,把横和竖的一 个短划都称为一笔,即7有3笔,8有7笔等。对于十个数字一种排列,要做到两相邻数字都可以由另一个数字加上几笔或减去几笔组成,但不能又加又减。比如 7→3是允许的,7→2不允许。任意输入一组数,判断是......
  • 两句话讲清楚离线安装docker
    两句话讲清楚离线安装docker目录两句话讲清楚离线安装docker写在前面解决方案写在前面背景:银河麒麟、离线环境,装吧,一装一个不吱声。参考链接:https://blog.csdn.net/zhaogangyyxf/article/details/141328640准备:docker安装包:文件类型是一个压缩包。一般是要去docker......
  • 基于Swagger自动生成离线API文档(Word、Markdown文档)
      在做项目时通常需要给客户提供离线Word的API文档归档,不要跟客户说有Swagger在线API文档,客户不会用也不会去看。只要你有Swagger,TableGo就能自动生成一份漂亮的Word离线API文档给客户,大大提高了写文档的效率,客户看了高兴,大家项目交付的速度也快很多。支持Swagger2和Swagger3......
  • 一本通题讲解:2059:【例3.11】买笔
    ​ 【题目描述】期末来临了,班长小Q决定将剩余班费xx元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为66元、55元和44元。小Q想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱。请您编一程序,帮小Q制订出一种买笔的方案。【输入......
  • 个性化推荐系统-离线召回模型验证
    文章目录背景前端核心组件模拟操作用户历史行为后端导入依赖启动服务根据uid获取推荐列表相关推荐用户历史记录用户行为数据上报背景计划构建并优化一个覆盖前端与后端的个性化推荐系统中的离线召回模块。此模块旨在通过高效的数据处理与分析,预先筛选出用户可能......
  • 目录PyCharm Community Edition、python3.11、pythonProject之间的关系
    PyCharmCommunityEdition类型:PyCharmCommunityEdition是由JetBrains公司提供的免费、开源的集成开发环境(IDE)。用途:它专门为Python开发设计,提供了代码编辑、运行、调试、测试等功能。特点:包括智能代码补全、代码分析、图形化界面设计、版本控制集成等高级功能。Pyt......
  • 超赞!PaddleOCR在国产麒麟系统中的离线绿色部署
    一、背景在信创(信息技术应用创新)背景下,OCR(OpticalCharacterRecognition,光学字符识别)技术的需求日益增长,主要体现在以下几个方面:首先,随着国家信创战略的推进,自主可控和信息安全成为关键议题。OCR技术作为信息技术的重要组成部分,其国产化、自主可控的需求日益迫切。这要求OCR技......
  • 【黑深化-悟空】离线完整免安装版+全能修改器2款补丁
    3DM风灵月影大神已经为这款游戏推出了首款35项修改器,轻松通关!基础无敌模式,还是希望拥有无限生命、法力和气力,无线棍势,无限七十二变……总计35项  修改器功能一览:-数字键1-无敌模式/无视伤害判定-数字键2-无限生命-数字键3-无限法力-数字键4-无限气力......
  • Python 3.11 从入门到实战1(环境准备)
            本篇文章是python3.11的学习开篇,我们的目标是:通过这一套资料学习下来,获得python基础学习与实例、实践相结合,使我们完全掌握python。并做到独立完成项目开发的能力。    今天的谈论的比较简单,也是后续学习的基础。python安装和工具pycharm的安装。pyth......
  • UE5蓝图 离线实时语音转文字插件 教程 c/c++插件 毫秒级响应 比http更节约资源
    UE5蓝图实现离线实时语音转文字插件教程如何用UE5蓝图实现离线实时语音转文字,实时接收麦克风音频并且快速的转换成文字。那么我来分享一下ez2txt这个插件。bilibili使用教程效果展示:蓝图:只要启动麦克风就可以了,其他的繁琐步骤插件都封装好了。参数说明Rule1_m......