docker安装部署rancher、rancher kubectl更新pod。
添加集群 -> 自定义 -> 录入基本配置信息后下一步 -> 勾选Etcd和Control Plane -> 复制需要在主机SSH运行的命令 -> 执行命令 -> 界面提示主机注册成功后点击完成 -> 等待集群状态变成 Active【需要点时间】rancher-ui中,系统设置 -> 高级设置 -> system-default-registry -> 点击升级,输入 registry.cn-ha
环境条件
虚拟机 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
更多推荐
所有评论(0)