Rancher部署k8s集群服务器规划:

建议起码四台机器用来部署,机器为centos7.7及以上,所有机器都需要安装docker

一台机器用来作为rancher服务端,一台机器用来作为k8s master节点,另外两台作为k8s worker节点;如果条件允许的话,k8s master节点和k8s worker节点可以部署多台;

这里以172.16.104.108为rancher服务端和k8s master节点、

172.16.104.109、172.16.104.105为k8s worker节点为例进行举例

1、所有机器centos7.7基本环境配置

安装基本软件包 (这里可以根据机器情况进行调整)

yum install -y gcc gcc-c++ glibc make openssl openssl-devel vim-enhanced tcpdump iftop lrzsz sysstat tree traceroute ntpdate xz unzip wget telnet

修改主机名 (非必须,利于统一管理,给各节点具体标签)

Vim /etc/hosts

172.16.104.108 node108

172.16.104.109 node109

172.16.104.105 node105

关闭selinux

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

关闭防火墙新手

systemctl stop firewalld.service && systemctl disable firewalld.service

配置主机时间、时区、系统语言同步

yum install -y ntpdate ;  ntpdate ntp1.aliyun.com

[root@node109 ~]# crontab -l  定时同步时间,服务器时间保持一致

*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &> /dev/null

kernel性能调优:

cat >> /etc/sysctl.conf<<EOF

net.ipv4.ip_forward=1

watchdog_thresh=30

net.bridge.bridge-nf-call-iptables=1

net.ipv4.neigh.default.gc_thresh1=4096

net.ipv4.neigh.default.gc_thresh2=6144

net.ipv4.neigh.default.gc_thresh3=8192

EOF

2、所有机器安装docker-ce 具体版本18.06.3

##安装docker-ce:

阿里云文档 Docker CE 镜像源站-阿里云开发者社区

##下载docker-ce的阿里云镜像仓库

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

##安装执行指定docker-ce版本,否则会有问题;支持的版本:17.03.x  18.06.x  18.09.x

yum list docker-ce.x86_64 --showduplicates | sort -r

yum install -y docker-ce-18.06.3.ce-3.el7

service docker start  ||  /bin/systemctl start docker.service

docker version

##修改docker镜像源站为阿里云镜像源;此镜像地址都可以通过阿里云-容器镜像服务拿到;

[root@node108 ~]# cat /etc/docker/daemon.json

{

  "registry-mirrors": ["https://cu4cokke.mirror.aliyuncs.com"]

}

service docker restart

3、在规划的rancher服务端机器上安装rancher

sudo docker run -d --restart=unless-stopped -v /usr/local/docker/rancher/:/var/lib/rancher/ -p 80:80 -p 443:443 rancher/rancher:stable

等待几分钟后,rancher自动部署完成,界面网址为以下:

https://172.16.104.108/login

登录账号密码:admin/admin

4、配置阿里云镜像仓库

阿里云镜像仓库服务,命令空间命名空间名字,选择私有空间;

在访问凭证设置固定账号密码;

docker login --username=ehealth1 registry.cn-hangzhou.aliyuncs.com

输入密码:XXXXXX

镜像仓库这里创建具体项目的镜像仓库,,命名空间选择刚才创建的空间,仓库名称比如为blade-log,仓库类型为私有;

这样具体的项目镜像仓库就添加好了;

进入到具体的镜像仓库下面,有具体推送和下载仓库的命令学习,可以用到后面项目发布中;

公网镜像仓库地址:registry.cn-hangzhou.aliyuncs.com/yjjktest/blade-log

专网(阿里云内网)镜像仓库地址:registry-vpc.cn-hangzhou.aliyuncs.com/yjjktest/blade-log

docker tag [imageid] registry.cn-hangzhou.aliyuncs.com/yjjktest/blade-log:1.0

docker push registry.cn-hangzhou.aliyuncs.com/yjjktest/blade-log:1.0

docker pull registry.cn-hangzhou.aliyuncs.com/yjjktest/blade-log:[镜像版本号]

5、rancher界面添加集群部署,添加k8s主机节点

添加集群,选择自定义集群

输入集群名称,其他选项默认;

私有镜像仓库这里选择docker项目部署的私有镜像地址和账号密码(一般为harbor仓库或者阿里云镜像仓库服务)

最后这个是添加主机命令,用于k8s master节点全部角色和k8s worker节点worker角色安装部署的命令;这里不需要改变,勾选不同角色,直接复制出来即可;然后保存集群;

Rancher版本为2.3.6

选择172.16.104.108为全部角色(etcd、controller、worker)

选择172.16.104.105、172.16.104.109为worker角色

注意命令中--server https://172.16.104.108 这个配置根据实际机器情况都不同

在108机器上执行全部角色的命令,在105和109机器上执行worker角色的命令,等待几分钟后,在rancher界面上集群下面主机就能看到各个机器加入k8s集群

###选择worker角色,命令如下:

sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.3.6 --server https://172.16.104.108 --token c7zdhsc528tt2fxqm8dtwwgx56ff7fwzbdpvrzzwdn99rnxckfcb85 --ca-checksum d34cb9d02fc288e412280a8099f65a4a3d89504cc02aeebc6a7f572cd7c5b3d4 --worker

##选择全部角色(etcd、controller、worker至少有一台机器需要包含全部角色)命令如下:

sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run registry.cn-hangzhou.aliyuncs.com/rancher/rancher-agent:v2.3.6 --server https://172.16.104.108 --token c7zdhsc528tt2fxqm8dtwwgx56ff7fwzbdpvrzzwdn99rnxckfcb85 --ca-checksum d34cb9d02fc288e412280a8099f65a4a3d89504cc02aeebc6a7f572cd7c5b3d4 --etcd --controlplane --worker

到这里,rancher部署k8s集群就自动完成了;

6、安装k8s的kubectl命令,通过kubectl(k8s客户端命令)命令方式部署k8s应用

准备一台专用于发布的机器,安装docker;一般是jenkins部署的机器;下载rancher界面上面的kubectl命令放置在机器的/usr/local/bin/kubectl下面;把配置文件拷贝到到/root/.kube/config里面

使用kubectl get nodes确认kubectl已经连接上k8s master可用,并且集群状态ready正常

[root@localhost ~]# kubectl get nodes

NAME      STATUS                     ROLES                      AGE    VERSION

node104   Ready                      worker                     142d   v1.17.4

node106   Ready,SchedulingDisabled   worker                     132d   v1.17.4

node108   Ready                      controlplane,etcd,worker   160d   v1.17.4

node109   Ready                      worker                     160d   v1.17.4

[root@localhost ~]#

7、rancher界面添加集群下的具体项目,以及通过jenkins编译、脚本发布

点击rancher 工作负载,部署服务,填写名字、docker镜像地址、端口映射;如果有共享存储挂载也可以挂载(在最后附录展示),没有的话这样就可以点击保存了;第一次镜像地址可能没有构建过,可以时间点随意写一个,jenkins版本更新后就会替换成新的

举例镜像地址:registry.cn-hangzhou.aliyuncs.com/yjjktest/blade-log:202008201139

Jenkins部署项目,编译好之后,利用脚本build-blade-project-image-docker.sh、blade-log-dockerfile文件、deploy-k8s.sh三个脚本文件来进行rancher k8s项目的版本升级

##jenkins项目内容:打包编译好之后,制作成镜像####################

#!/bin/bash

NAME=blade-log

tag=$(date "+%Y%m%d%H%M")

source /etc/profile

cd /opt/docker

sh build-blade-project-image-docker.sh $NAME $tag

##部署

sh deploy-k8s.sh $NAME $tag

sh delete-history-image.sh  ##删除本地服务器历史镜像版本

下面四个脚本附件和脚本具体内容:

############build-blade-project-image-docker.sh脚本###############################

#操作/项目路径(Dockerfile存放的路劲)

BASE_PATH=/opt/docker

#docker 镜像/容器名字或者jar名字 这里都命名为这个

SERVER_NAME=$1

tag=$2

#tag=$(date "+%Y%m%d%H%M")

# 源jar路径  即jenkins构建后存放的路径

SOURCE_PATH=/root/.jenkins/workspace/docker/$SERVER_NAME/target

#docker file针对应用的名称

DOCKERFILENAME=$SERVER_NAME-dockerfile

#项目路径

APP_PATH=/opt/docker/$SERVER_NAME

#容器id

CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')

#镜像id

IID=$(docker images | grep "$SERVER_NAME" | grep "$tag" | awk '{print $3}')

#仓库地址 注意这里的镜像仓库地址改成自己的

RID=registry.cn-hangzhou.aliyuncs.com/yjjktest

echo "最新构建代码 $SOURCE_PATH/$SERVER_NAME.jar 迁移至 $APP_PATH ...."

#把项目从jenkins构建后的目录移动到我们的项目目录下同时重命名下

 mkdir -pv $APP_PATH

 \cp -rf $SOURCE_PATH/$SERVER_NAME.jar $APP_PATH/$SERVER_NAME.jar

#修改文件的权限

 chmod 644 $APP_PATH/$SERVER_NAME.jar

 echo "$SERVER_NAME 拷贝完成"

# 构建docker镜像

        if [ -n "$IID" ]; then

                echo "存在$SERVER_NAME:$tag镜像,IID=$IID"

                cd $APP_PATH

                docker build --build-arg PKG_NAME=$SERVER_NAME -f $DOCKERFILENAME -t $RID/$SERVER_NAME:$tag .

        else

                echo "不存在$SERVER_NAME:$tag镜像,开始构建镜像"

                cd $APP_PATH

                docker build --build-arg PKG_NAME=$SERVER_NAME -f $DOCKERFILENAME -t $RID/$SERVER_NAME:$tag .

        fi

#push docker 镜像

sudo docker push $RID/$SERVER_NAME:$tag

if [ $? -eq 0 ];then

    echo "$SERVER_NAME镜像推送完成,镜像tag是$tag"

else

    echo "$SERVER_NAME容器推送失败...请注意"

    echo 1

fi

docker images | grep "<none>"  &> /dev/null

if [ $? -eq 0 ];then

    docker rmi `docker images | grep "<none>" | awk '{print $3}'` &> /dev/null

    echo "删除历史的版本成功"

else

    echo "没有需要删除的历史的版本"

Fi

#######blade-log-dockerfile文件,用于制作docker镜像,需要学习命令#########

[root@localhost docker]# cat /opt/docker/blade-log/blade-log-dockerfile

FROM openjdk:8-alpine   ##底层镜像

MAINTAINER taozp@yjhealth.cn

ARG PKG_NAME

RUN cp /etc/apk/repositories /etc/apk/repositories.bak && \

    echo "http://mirrors.aliyun.com/alpine/v3.8/main/" > /etc/apk/repositories && \

    echo "http://mirrors.aliyun.com/alpine/v3.8/community/" >> /etc/apk/repositories && \

    apk update && apk upgrade && \

    apk add tzdata && rm -rf  /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

WORKDIR /usr/local/docker/$PKG_NAME

ADD $PKG_NAME.jar $PKG_NAME.jar

EXPOSE 8103           ##修改服务对应的端口

ENTRYPOINT ["java","-jar","./blade-log.jar","--spring.profiles.active=test"]  ##启动命令

#######deploy-k8s.sh脚本 获取最新的镜像版本通过kubectl命令进行替换rancher项目中的镜像tag版本来达到发布的目的###########

[root@localhost docker]# cat /opt/docker/deploy-k8s.sh

#!/bin/bash

#

source /etc/profile

#仓库地址

RID=registry.cn-hangzhou.aliyuncs.com/yjjktest

##namespace命令空间

ns=default

##应用名称

deployment_name=$1

##升级的镜像版本

image_tag=$2

##获取最新版本的digest

digest=$(docker images registry.cn-hangzhou.aliyuncs.com/yjjktest/${deployment_name} --digests | awk {'print $3'} | head -2 | tail -1)

##获取现在deployment的版本号

now_deploy_image=$(kubectl describe deploy/${deployment_name} |grep Image | awk {'print $2'} | awk -F':' {'print $2'})

kubectl cluster-info

if [ $? -eq 0 ];then

    echo "有kubectl命令,能正常连上集群"

else

    echo "没有kubectl命令,或者不能连接上集群,退出脚本..."

    exit 1

fi

##查看deployment历史修订版本

echo "查看${deployment_name}历史版本个数"

kubectl rollout history deploy/${deployment_name}

##升级deployment镜像版本

if [ ${now_deploy_image} == ${image_tag} ];then

   echo "${deployment_name} 同一个tag升级,${image_tag}"

   kubectl set image deploy/${deployment_name}  ${deployment_name}=${RID}/${deployment_name}@${digest} --record

else

   echo "升级${deployment_name}到${image_tag}版本"

   kubectl set image deploy/${deployment_name}  ${deployment_name}=${RID}/${deployment_name}:${image_tag} --record

fi

##查看deployment升级状态

echo "${deployment_name}升级后的状态查看:"

kubectl rollout status deploy/${deployment_name}

##查看当前pod状态

sleep 3

echo "查看当前所有pod的状态"

kubectl get pods -o wide -n ${ns}

##########delete-history-image.sh定时删除服务器本地历史镜像版本#################

[root@localhost docker]# cat /opt/docker/delete-history-image.sh

#!/bin/bash

#

image_name=(blade-gateway blade-auth blade-resource blade-desk blade-log blade-system blade-user blade-admin mechc-im mechc-older yj-older-task xxl-job-admin mechc-survey mechc-iot mechc-pay mechc-organ)

for var in ${image_name[@]}

do

  num=$(docker images | grep $var | wc -l)

  if [ $num -ge 2 ];then

     docker images | grep $var

     docker rmi -f `docker images | grep $var | tail -1 | awk '{print $3}'` &> /dev/null

     echo "$var 删除大于3个保留的镜像成功"

  else

     echo "$var 没有保留的镜像大于3个"

  fi

Done

############附录1 养老rancher项目目前端口规划###############################

应用端口                                          容器映射端口

blade-gateway   80                           |    30001 

blade-auth     8100   8721                   |    30002   30721

blade-resource  8010  8720                   |    30003   30720

blade-desk     8105                          |    30004

blade-log       8103   8720                  |    30005   30820

blade-system     8106  8719                  |    30006   30719

blade-user      8102     8722                |    30007   30722

blade-admin  7002                            |    30008

                                             |  

mechc-im     8108   8721                     |    30009   30821

mechc-older   8104  8723                     |    30010   30723

                                             |  

yj-older-task-0.0.1-SNAPSHOT  8089  9999     |    30011   30999

xxl-job-admin   8081                         |    30012

mechc-survey  8109 8720   |   30013  30920

mechc-iot  8107     |    30015

mechc-pay  8108  |  30016

mechc-organ  8110  |   30017

############附录2 rancher添加项目时添加共享存储############################

1、安装NFS服务端,可以按照上面文档安装

2、Rancher 选择集群下面 存储--持久卷,添加PV

3、填写名称,卷插件选择NFS share,容量填写,插件配置填写路径和服务器,访问模式改成多主机读写

4、进入到具体项目下面,PVC,添加PVC,选择刚才添加的PV持久卷

5、工作负载,添加项目,数据库这里打开,填写卷名、选择刚才创建的PVC、容器路径、子路径;这样容器内的有些目录文件可以通过共享存储映射到服务器上使用了;

图片为容器的路径/usr/local/docker/share/ 对应是 服务器的NFS地址+子路径目录

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐