美文网首页
Centos7安装rancher记录

Centos7安装rancher记录

作者: liurongming | 来源:发表于2021-09-09 16:07 被阅读0次

一、环境准备

最小化安装操作系统:CentOS-7-x86_64-Minimal-2009.iso

# 新建虚拟机并配置固定IP及主机名,每个虚拟机8核数16G
it18101                     172.18.5.131
it18102                     172.18.5.199
it18103                     172.18.5.74
it18104                     172.18.5.252

设置主从时间同步,以172.18.5.131为主时间服务器,其它机器同步该服务器

# 安装时间同步【centos7默认已经安装】
yum -y install chrony
systemctl enable chronyd
systemctl start chronyd
systemctl restart chronyd

# 编辑时间同步
# NTP服务器:
# 210.72.145.44 (国家授时中心服务器IP地址))
# ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址)
vim /etc/chrony.conf # 主服务器配置
server 210.72.145.44 iburst
server ntp.sjtu.edu.cn iburst

# 主配置
# cat /etc/chrony.conf | grep -vE '^#|^$'
server 210.72.145.44 iburst
server ntp.sjtu.edu.cn iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 172.18.0.0/16
local stratum 10
logdir /var/log/chrony

# 从配置【都指向主服务器】
# cat /etc/chrony.conf | grep -vE '^#|^$'
server 172.18.5.131 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony

# 查看时间同步状态
timedatectl status
# 开启网络时间同步
timedatectl set-ntp true

# 查看 ntp_servers
chronyc sources -v
# 查看 ntp_servers 状态
chronyc sourcestats -v
# 查看 ntp_servers 是否在线
chronyc activity -v
# 查看 ntp 详细信息
chronyc tracking -v

# 查看日期时间、时区及 NTP 状态
timedatectl

# 查看时区列表
timedatectl list-timezones
timedatectl list-timezones |  grep  -E "Asia/S.*"
# 修改时区
timedatectl set-timezone Asia/Shanghai
# 修改日期时间[一般不需要设置]
timedatectl set-time "2021-09-09 15:20:20"
# 开启 NTP
timedatectl set-ntp true/flase

# 开放端口【每台都开放】
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
# 因NTP使用123/UDP端口协议,所以允许NTP服务即可

设置selinux为警告

vim /etc/selinux/config
grep -Ev '^$|^#'  /etc/selinux/config
# 配置为警告即可
SELINUX=permissive
SELINUXTYPE=targeted
# 重启生效
reboot

开放rancher所需防火墙端口

firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=2379/tcp
firewall-cmd --permanent --add-port=2380/tcp
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=8472/udp
firewall-cmd --permanent --add-port=9099/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10254/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --permanent --add-port=30000-32767/udp
firewall-cmd --reload

通常情况下,可以将这些端口在 Kubernetes 节点上开放,无论它是哪种类型的集群。

协议 端口 描述
TCP 22 使用主机驱动通过 SSH 进行节点配置
TCP 2376 主机驱动与 Docker 守护进程通信的 TLS 端口
TCP 2379 etcd 客户端请求
TCP 2380 etcd 节点通信
UDP 8472 Canal/Flannel VXLAN overlay 网络
UDP 4789 Windows 集群中 Flannel VXLAN overlay 网络
TCP 9099 Canal/Flannel 健康检查
TCP 9796 集群监控拉取节点指标的默认端口(仅需要内网可达)
TCP 6783 Weave 端口
UDP 6783-6784 Weave UDP 端口
TCP 10250 Metrics server 与所有节点的通信
TCP 10254 Ingress controller 健康检查
TCP/UDP 30000-32767 NodePort 端口范围

安装docker[要高于Docker 19.03版本]

curl -fsSL https://get.docker.com/ | sh
# docker -v
Docker version 20.10.8, build 3967b7d

修改国内镜像,提升速度

国内Docker镜像仓库名称 链接
Docker 官方中国区 https://registry.docker-cn.com
网易 http://hub-mirror.c.163.com
中国科学技术大学 https://docker.mirrors.ustc.edu.cn
阿里云 https://<你的ID>.mirror.aliyuncs.com
vim /etc/docker/daemon.json
{
    "registry-mirrors": ["http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"]
}
# 推荐使用
echo '{"registry-mirrors": ["https://registry.docker-cn.com"]}'> /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker
docker search nginx

二、简单安装

第一步:创建挂在目录

mkdir -p /opt/rancher/{certs,data,logs}

第二步:解决证书问题

使用已有的可信证书方式,并且docker方式安装。

提前在Let's Encrypt 申请*.domain.com泛域名证书,省去单个证书配置麻烦。
一旦启用外部证书,则确保内部访问用证书保函的域名访问。

# 制作好证书上传到指定目录,注意证书必须是pem格式
# tree /opt/rancher
/opt/rancher
├── certs
│   ├── full_chain.crt
│   └── private_key.key
├── data
└── logs

挂在已有外部证书,先记录暂不执行,后面还需挂在其它目录,制作完再执行。

docker run -d --privileged --restart=unless-stopped \
    -p 80:80 -p 443:443 \
    -v /opt/rancher/certs/full_chain.crt:/etc/rancher/ssl/cert.pem \
    -v /opt/rancher/certs/private_key.key:/etc/rancher/ssl/key.pem \
    rancher/rancher:stable \
    --no-cacerts

第三步:挂载审计日志

API 审计日志记录通过 Rancher Server 进行的所有用户请求和系统事务。

 --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  -v /opt/rancher/logs:/var/log/auditlog \
  -e AUDIT_LEVEL=1 \
  rancher/rancher:stable

第四步:持久化数据

 --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  -v /opt/rancher/data:/var/lib/rancher \
  rancher/rancher:stable

【最终安装】综合执行:

# 宿主操作:echo "Asia/Shanghai" > /etc/timezone
#-v /etc/timezone:/etc/timezone:ro \
#-v /etc/localtime:/etc/localtime:ro \
# 执行挂载运行
docker run -d --privileged --restart=unless-stopped \
    -p 80:80 -p 443:443 \
    -v /opt/rancher/certs/full_chain.crt:/etc/rancher/ssl/cert.pem \
    -v /opt/rancher/certs/private_key.key:/etc/rancher/ssl/key.pem \
    -v /opt/rancher/logs:/var/log/auditlog \
    -e AUDIT_LEVEL=1 \
    -v /opt/rancher/data:/var/lib/rancher \
    -v /etc/timezone:/etc/timezone:ro \
    -v /etc/localtime:/etc/localtime:ro \
    rancher/rancher:stable \
    --no-cacerts

# 重装快捷卸载
# 停止所有
docker ps  | awk '{print $1}' | xargs docker stop
# 删除所有
docker ps -a  | awk '{print $1}' | xargs docker rm -f

配置域名测试:

Windows路径:C:\Windows\System32\drivers\etc\hosts

# 简单测试,本次直接使用hosts指向,后期改DNS映射即可
172.18.5.131    rancher.domain.com

访问:rancher.domain.com 即可。

使用代理访问,并且不配置证书:
内部使用私有证书,仅外网配置证书

docker run -d --privileged --restart=unless-stopped \
    -p 8080:80 -p 8443:443 \
    -v /opt/rancher/logs:/var/log/auditlog \
    -e AUDIT_LEVEL=1 \
    -v /opt/rancher/data:/var/lib/rancher \
    -v /etc/timezone:/etc/timezone:ro \
    -v /etc/localtime:/etc/localtime:ro \
    rancher/rancher:stable
# 找回密码
docker exec -ti <container_id> reset-password
docker exec -ti c445c3a1c6aa reset-password

由于这个时候,没有做代理开放端口,因此需要借助nginx或防火墙转发

这里使用nginx方式:

第一种方式:直接宿主机安装nginx方式

upstream rancher {
    # docker IP:port
    server 172.17.0.2:443; 
    # 或者 server 172.17.0.2:80
}

server {
    listen 443 ssl;
    server_name rancher.domain.com;
    ssl_certificate certs/full_chain.crt;
    ssl_certificate_key certs/private_key.key;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass https://rancher;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 900s;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

server {
    listen 80;
    server_name rancher.domain.com;
    return 301 https://$server_name$request_uri;
}

第二种方式:使用docker 安装nginx

# 拉取镜像
docker pull nginx:latest
# 注意: rancher/rancher 指定名称启动 --name=rancher-server
mkdir -p /opt/nginx/{certs,conf,conf.d,html,logs}
# tree nginx/
nginx/
├── certs
│   ├── full_chain.crt
│   └── private_key.key
├── conf
│   └── nginx.conf
├── conf.d
│   ├── default.conf
│   └── rancher.conf
├── html
│   ├── 50x.html
│   └── index.html
└── logs
    ├── access.log
    └── error.log
    
5 directories, 9 files
# 以上文件如何获得
# 1.不挂载任何目录 直接docker启动nginx
# 2.拷贝docker中nginx到本地目录 [docker cp 容器id:/具体目录或文件 ./]
# 3.certs 直接把本地目录挂载上去即可
# 4.注意certs和conf.d为直接目录映射,但要提前准备一一对应的文件。
# 5. 保持时间一致 
# 宿主操作:echo "Asia/Shanghai" > /etc/timezone
#-v /etc/timezone:/etc/timezone:ro \
#-v /etc/localtime:/etc/localtime:ro \
# 挂载启动nginx
docker run -d --restart=always --name=nginx-proxy \
    -p 80:80 -p 443:443 \
    -v /opt/nginx/certs:/etc/nginx/certs \
    -v /opt/nginx/html:/usr/share/nginx/html \
    -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v /opt/nginx/conf.d:/etc/nginx/conf.d  \
    -v /opt/nginx/logs:/var/log/nginx \
    -v /etc/timezone:/etc/timezone:ro \
    -v /etc/localtime:/etc/localtime:ro \
    --link=rancher-server \
nginx:latest

# 常用操作
# 外部执命令
docker exec -t  8ed6c4fc16b4 /bin/bash -c 'cd /etc/nginx && pwd;ls conf.d'
# 测试配置
docker exec -t  8ed6c4fc16b4 /bin/bash -c 'nginx -t'
# 重新加载文件
docker exec -t  8ed6c4fc16b4 /bin/bash -c 'nginx -s reload'

查看状态

# 监视状态
docker inspect 1c81eaa0f79a

# 查看IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' 1c81eaa0f79a

# 查看运行状态
docker inspect --format '{{.Name}} {{.State.Running}}' 1c81eaa0f79a

# 查看代理端口
netstat -nlp |grep docker-proxy|awk '{print $4}'|sort

# 查看ip
arp -a |grep docker

# 查看端口【宿主机查看即可】
ps -ef | grep "http-listen-port"
# 也可以进入容器,再查看
docker exec -it  1c81eaa0f79a /bin/bash
ps -ef | grep "http-listen-port"

# 显示并查看 Rancher 服务器的日志
docker logs -f 1c81eaa0f79a

关于解决docker时区问题,时区不对会导致业务紊乱,保证时间一致非常关键。

# 解决docker时区问题
echo "Asia/Shanghai" > /etc/timezone
-v /etc/timezone:/etc/timezone:ro 
-v /etc/localtime:/etc/localtime:ro

# 方式一
# 运行时直接挂载:【推荐挂载方式】
docker run -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro 
# Docker-compose 构建,在docker-compose.yml文件相应应用下添加卷:
volumes:
  - /etc/localtime:/etc/localtime:ro
  - /etc/timezone:/etc/timezone:ro
# “ro”的意思是只读(read-only)模式,可以保证其挂载卷不被 Docker 容器内部文件系统配置所覆盖。

# 方式二
# 复制宿主机 localtime 配置
docker cp /etc/timezone 容器ID:/etc/timezone
docker cp /usr/share/zoneinfo/Asia/Shanghai  容器ID:/etc/localtime
docker restart 容器ID
# 检测时间是否一致
[root@it18101 ~]# docker exec -t  8ed6c4fc16b4 /bin/bash -c 'date'
Fri Sep 10 10:31:18 CST 2021
[root@it18101 ~]# date
Fri Sep 10 10:32:37 CST 2021
[root@it18101 ~]#

# 其它时间调整
# Java 应用,在启动 jar 包时添加环境变量
-Duser.timezone=GMT+08
# MySQL 容器时区,run 时添加参数
-e TZ="Asia/Shanghai"

附:关于目录挂载

# 单目录挂载
docker run -it -v /宿主机目录:/容器目录 镜像名
# 多目录挂载
# 没有执行权限,则添加 --privileged=true 来解决挂载的目录没有权限的问题。
docker run -it -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
# 只读目录挂载
docker run -it -v  /宿主机目录:/容器目录:ro 镜像名
# 已运行追加挂载
# 美化json输出 | python -m json.tool
find / -name config.v2.json
cat /var/lib/docker/containers/container-ID/config.v2.json | python -m json.tool
# 修改配置文件(需停止docker服务)
# 命令模式: :%!python -m json.tool 美化JSON
vim /var/lib/docker/containers/container-ID/config.v2.json

# 1、停止docker服务
# 修改之前必须停止docker服务
systemctl stop docker.service
# Warning: Stopping docker.service, but it can still be activated by:
# docker.socket
# systemctl stop docker.socket

# 2、vim /var/lib/docker/containers/container-ID/config.v2.json
# 修改配置文件中的目录位置,然后保存退出
{
    "MountPoints": {
        "/etc/nginx/certs": {
            "Destination": "/etc/nginx/certs",
            "Driver": "",
            "Name": "",
            "Propagation": "rprivate",
            "RW": true,
            "SkipMountpointCreation": false,
            "Source": "/opt/nginx/certs",
            "Spec": {
                "Source": "/opt/nginx/certs",
                "Target": "/etc/nginx/certs",
                "Type": "bind"
            },
            "Type": "bind"
        }
}
# 3、启动docker服务
systemctl start docker.service

# 4、启动docker容器
docker start <container-name/ID>
  1. 在Rancher上疏散该节点

  2. 删除节点

  3. 登录该节点宿主机,删除rancher相关容器

    docker rm -f -v $(docker ps -aq)
    
  4. 删除该节点的所有volume

    docker volume rm $(docker volume ls)
    
  5. 最后删除/var/lib/rancher文件夹

  6. 节点删除成功!
    7.打包及导入

# 打包
docker save $(docker images | grep rancher | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o k8s-node.tar
# 导入
docker load -i k8s-master.tar

相关文章

网友评论

      本文标题:Centos7安装rancher记录

      本文链接:https://www.haomeiwen.com/subject/keaiwltx.html