docker安装部署rancher、rancher kubectl更新pod。

这篇具有很好参考价值的文章主要介绍了docker安装部署rancher、rancher kubectl更新pod。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境条件

虚拟机 VMWare【建议4G、4核】
操作系统 CentOS7

文章后面记录了部署过程出现的一系列问题,建议先对照问题配置下环境。

前期准备

1、关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2、关闭selinux

​​​​​​​# 永久关闭(需重启)
sed -i 's/enforcing/disabled/' /etc/selinux/config
reboot
#临时关闭
setenforce 0

3、关闭swap分区

# 永久关闭(需重启)
sed -ri 's/.*swap.*/#&/' /etc/fstab
reboot
#临时关闭
swapoff -a

4、设置主机名

# 在master上执行
hostnamectl set-hostname vm1
# 在node1上执行
hostnamectl set-hostname vm2
# 在node2上执行
hostnamectl set-hostname vm3

5、​​​​​​​在每个节点添加时间同步

# 安装ntpdate时间同步插件
yum install ntpdate -y
# 开启时间同步
ntpdate time.windows.com

6、所有节点安装Docker

# 获取镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 安装
yum -y install docker-ce
# 设置开机自启动并启动
systemctl enable docker && systemctl start docker
# 查看版本
docker version
# 设置镜像加速器、设置容器日志保留限制
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "log-driver": "json-file",
  "log-opts": {"max-size": "100m", "max-file": "3"}
}
EOF
# 重载配置
sudo systemctl daemon-reload
# 重启docker
sudo systemctl restart docker

安装步骤

rancher中文官网地址:Rancher文档 | K8S文档 | Rancher | Rancher文档

1、镜像拉取

此处针对rancher2.x
docker pull rancher/rancher:v2.5.12

2、查看镜像及镜像详细信息

docker images
docker inspect rancher/rancher:v2.5.12

3、创建挂载目录
rancher镜像主要有四个volume目录(rnacher、log、kubelet、cni),默认方式是采用匿名卷的方式,可以使用挂载到指定的主机目录方式来进行数据卷持久化。

mkdir -p /usr/local/rancher/rancher
mkdir -p /usr/local/rancher/log
mkdir -p /usr/local/rancher/kubelet
mkdir -p /usr/local/rancher/cni

4、启动容器

docker run --name rancher -d --privileged --restart=always -p 80:80 -p 443:443 \
-v /usr/local/rancher/rancher:/var/lib/rancher \
-v /usr/local/rancher/log:/var/log \
-v /usr/local/rancher/cni:/var/lib/cni \
-v /usr/local/rancher/kubelet:/var/lib/kubelet \
rancher/rancher:v2.5.12

# 注意 
# 如果部署rancher的主机需要安装k8s节点,那就要把rancher的80/443端口设置成其他的端口,以免和k8s的ingress端口冲突。

5、访问可视化界面
​​​​​​​【访问自己虚拟机的地址】
设置登录密码进入下一步并设置rancher server url【确保集群的每个节点都能访问该地址】
进入管理界面后可以修改界面语言

6、配置镜像

在rancher-ui中,系统设置 -> 高级设置 -> system-default-registry -> 点击升级,输入 registry.cn-hangzhou.aliyuncs.com 后保存即可

7、添加集群
添加集群 -> 自定义 -> 录入基本配置信息后下一步 -> 勾选Etcd和Control Plane -> 复制需要在主机SSH运行的命令 -> 执行命令 -> 界面提示主机注册成功后点击完成 -> 等待集群状态变成 Active【需要点时间】

关于部署更新pod

关于部署应用,本人用的都是shell+Dockerfile的形式,先在集群上面手动创建app,然后再通过jenkins执行shell脚本,把应用打包好,然后打包成docker镜像,推送到远程仓库,最后使用rancher kubectl命令实现pod的升级。

需要提前安装rancher-cli,kubectl,并配置环境变量。

# 登录rancher,只需要登录一次就可以无限切换集群了(也就是下面的切换集群命令)。
rancher login https://127.0.0.1:9017/v3 --token token-jftp9:56rh9l88vngxgsd4tgrtvrzx52dr2sfx79h6dnn7b4j56lq5j8rn5q

# 切换集群
rancher context switch 集群id 

以下是一些常用的配置项。

1、java应用

build.sh
#!/bin/bash
java -version
mvn -version
mvn clean package -Dmaven.test.skip=true -e -U

time=$(date "+%Y%m%d%H%M%S")
env=$env

project="app"

commit_branch=${branch:7}
commit_seql=$(git rev-parse --short HEAD)

commit_branch="master"
env="dev"

docker login -u user -p password

image_name=$commit_branch-$commit_seql-$time
docker build -t $image_name .

docker_tag=docker/app:$project-$env-$image_name
docker tag $image_name $docker_tag

docker push $docker_tag
docker rmi -f $docker_tag

echo "本次准备发布到[$env]环境的镜像地址是[$docker_tag]"

cluster="c-gtzwq:p-kz5h4"
namespace="default"

echo "开始部署"

rancher context switch $cluster

rancher kubectl set image deployment/$project $project=$docker_tag -n $namespace

echo "本次部署完成"
Dockerfile
FROM hdfk7/open-jdk-17

COPY docker-entrypoint.sh /docker-entrypoint.sh

COPY target/*.jar /

RUN chmod +x /docker-entrypoint.sh

ENTRYPOINT ["/docker-entrypoint.sh"]

# hdfk7/open-jdk-17集成了skywalking
docker-entrypoint.sh
#!/bin/bash
if [[ ! -z "$(which java)" ]]; then
  JAVA_OPTS="${JAVA_OPTS}"
  APP_OPTS="${APP_OPTS}"
  echo "JAVA_OPTS=${JAVA_OPTS}"
  echo "APP_OPTS=${APP_OPTS}"
  echo "INFO: auto detect find jar on / and then bootup..."
  jar=$(find /*.jar 2>/dev/null | egrep -v sources.jar | egrep -v tests.jar | head -n 1)
  echo "jar=${jar}"
  if [[ -n "${jar}" ]]; then
    echo "run ${jar}"
    exec java $JAVA_OPTS $APP_OPTS -jar ${jar}
  else
    echo "cant detect /app.jar, will exit"
    sleep 20
    exit 1
  fi
fi

2、web应用

build.sh

#!/bin/bash
node -v
npm -v

npm install

npm run build

time=$(date "+%Y%m%d%H%M%S")
env=$env

project="app"

commit_branch=${branch:7}
commit_seql=$(git rev-parse --short HEAD)

commit_branch="master"
env="dev"

docker login -u user -p password

image_name=$commit_branch-$commit_seql-$time
docker build -t $image_name .

docker_tag=docker/app:$project-$env-$image_name
docker tag $image_name $docker_tag

docker push $docker_tag
docker rmi -f $docker_tag

echo "本次准备发布到[$env]环境的镜像地址是[$docker_tag]"

cluster="c-gtzwq:p-kz5h4"
namespace="default"

echo "开始部署"

rancher context switch $cluster

rancher kubectl set image deployment/$project $project=$docker_tag -n $namespace

echo "本次部署完成"

Dockerfile

FROM nginx

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && rm -rf /etc/nginx/conf.d/* && rm -rf /etc/nginx/nginx.conf && rm -rf /usr/share/nginx/html/*

COPY dist /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/nginx.conf
nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 9000;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    server_tokens       off;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    server {
            listen       80;
            root         /usr/share/nginx/html;
            location / {
                try_files $uri $uri/ /index.html;
            }
            gzip on;
            gzip_buffers 32 4K;
            gzip_comp_level 6;
            gzip_min_length 100;
            gzip_types application/javascript text/css text/xml;
            gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
            gzip_vary on;
    }
}

问题处理

1、启动rancher容器服务报 WARNING: IPv4 forwarding is disabled. Networking will not work.错误

修改配置文件:
vim /usr/lib/sysctl.d/00-system.conf
追加内容:
net.ipv4.ip_forward=1
重启网络:
systemctl restart network
将之前错误的docker删掉,重新创建启动即可
docker stop 容器ID
docker rm 容器ID

2、集群创建过程报错 can not find RKE state file

原因是 hostname 和 DNS 的解析规则不匹配,需要修改 hostname vim /etc/hostname 或者 hostnamectl set-hostname master

3、rancher-agent容器服务启动不起来

可能是 rancher server url 配置的不正确

4、集群安装过程报错 [etcd] Failed to bring up Etcd Plane: [etcd] Etcd Cluster is not healthy

可能是上个集群的一些配置没有清除,导致配置文件不同步之类的原因,在安装rancher的机器上执行如下命令:
docker stop $(docker ps -aq)

docker system prune -f

docker volume rm $(docker volume ls -q)

docker image rm $(docker image ls -q)

umount $(df -HT | grep '/var/lib/kubelet/pods' | awk '{print $7}')

rm -rf /etc/ceph /etc/cni /etc/kubernetes /opt/cni /opt/rke /run/secrets/kubernetes.io /run/calico /run/flannel /var/lib/calico /var/lib/etcd /var/lib/cni /var/lib/kubelet /var/lib/rancher/rke/log /var/log/containers /var/log/pods /var/run/calico /usr/local/software/rancher-home/

5、创建集群过程报错 Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker

vi /etc/resolv.conf
添加 nameserver 8.8.8.8和nameserver 114.114.114.114
重启网络 systemctl restart network

6、创建集群时一直卡在 Pre-pulling kubernetes images 不动

rancher-ui中,系统设置 -> 高级设置 -> system-default-registry -> 点击升级,输入 registry.cn-hangzhou.aliyuncs.com 后保存即可

最后

该文章内容都是本人亲自实践后的,该内容参考了以下博文。

一文教你从零快速搭建k8s集群_小螺旋丸的博客-CSDN博客

Docker 设置日志文件限制最多3个,最大5M_docker设置日志上限_qiandeqiande的博客-CSDN博客

docker安装部署rancher​​​​​​​文章来源地址https://www.toymoban.com/news/detail-439728.html

到了这里,关于docker安装部署rancher、rancher kubectl更新pod。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • kubectl&kubelet&rancher&helm&kubeadm这几个命令行工具是什么关系?

    在最近学习k8s的过程中,发现kubectlkubeletrancherhelmkubeadm这几个命令怎么在交错使用,他们究竟是什么关系?他们分别应该在什么情况下使用呢?这里我进行了简单的总结,做个区分。 Kubectl 是一款用于管理和操作 Kubernetes 集群的命令行工具,是Kubernetes 的一个标准 CLI,具备可

    2024年02月02日
    浏览(46)
  • 【Docker安装】快速部署Docker环境

    2023年07月07日
    浏览(42)
  • Docker+rancher部署SkyWalking8.5并应用在springboot服务中

    Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式

    2024年02月13日
    浏览(35)
  • 使用kubectl获取pod日志小技巧

    目录 1. 前言 2. kubectl logs 3. 附官方命令解释 1. 前言 如何查看k8s中pod的console控制台日志?即类似于docker logs查看容器日志一样;可以使用 kubectl 命令,查看K8S中 Pod的日志。 在这里,将通过kubectl获取 Pod 的日志,包括当前运行、同一deployment下所有副本的日志。 2. kubectl logs 2.

    2024年02月04日
    浏览(38)
  • Kubernetes系列-kubectl命令-pod相关

    1. 获取集群全量pod列表 或者 2. 获取制定ns中的pod列表 3. 查看pod所在节点 4. 查看pod内存使用情况 5. 查看某pod的相关日志 --tail=n:指定查看多少行日志。 6. 查看pod配置 7. 查看pod所属node节点 8. pod扩容 9. pod缩容 10. 查看pod详细信息 11. 查看pod的资源配置 12. 登陆pod  

    2024年02月16日
    浏览(38)
  • 常用环境部署(七)——Docker安装RocketMQ

    (1)拉取镜像 (2)创建一个数据目录 即创建一个namesrv数据存储路径 (3)构建namesrv容器  (4)参数说明 参数 说明 -d 以守护进程的方式启动 - -restart=always docker重启时候容器自动重启 - -name rmqnamesrv 把容器的名字设置为rmqnamesrv -p 9876:9876 把容器内的端口9876挂载到宿主机98

    2023年04月14日
    浏览(43)
  • Docker环境下kkfileview安装部署记录

    官方文档地址:http://kkfileview.keking.cn/zh-cn/docs/production.html 源码地址:https://gitee.com/kekingcn/file-online-preview 一般没有改代码的话用这种方式就可以,注意有nginx转发的话需要配置base.url参数 由于对代码做了一些更改,所以手动部署   Dockerfile文件  pom 五、前端url处理

    2024年02月11日
    浏览(48)
  • docker环境安装 部署 Oracle 19c

    3.1 启动Oracle 容器 3.2 配置Oracle 初始化 3.3 dbvs 连接 到此就安装连接成功了

    2024年02月03日
    浏览(49)
  • rancher平台上强制删除pod服务操作

    在日常paas平台运维工作中需要对rancher平台进行巡检的工作,在巡检时发现在rancher管理界面无法删除异常的pod服务,   像这样的情况就是k8s集群的pod无法通过默认的方式去删除掉pod服务,这时候只能是手工强制性去删除pod服务。 注:rancher平台怎么切换到kubelet命名行界面指导

    2024年02月15日
    浏览(33)
  • Kubernetes系列-通过kubectl实现重启pod的方法

    kubectl 没有 restart pod 这个命令,主要是由于在 k8s 中pod 的管理属于rs 等控制器,并不需要手动维护,但有时更新了yaml文件后,期望破都能够\\\"重启\\\"重新加载yaml文件,比如修改了configmap 的配置文件后,希望重启pod 加载配置,此时就需要 “重启” Pod。而\\\"重启\\\"准确地来说是重建

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包