简单部署k8s及spring项目发布




前言


一、环境准备

三台服务器,操作系统centOS7

服务器配置:内存2GB+,CPU双核+,硬盘20GB+

服务器间网络互通

可连外网,需下载依赖

我搭建的时服务器地址如下

192.168.2.169 k8s-master

192.168.1.90 k8s-node1

192.168.2.170 k8s-node2



二、服务器准备(每台都需要)



1. 防火墙

        关闭防火墙

systemctl stop firewalld
    禁止防火墙开机自启
systemctl disable firewalld



2. selinux

        永久关闭

sed -i 's/enforcing/disabled/' /etc/selinux/config

        临时关闭

setenforce 0

3. swap分区

        永久关闭

sed -ri 's/.*swap.*/#&/' /etc/fstab

        临时关闭

swapoff -a

4. 设置主机名

#设置192.168.2.169
hostnamectl set-hostname k8s-master
#设置192.168.1.90
hostnamectl set-hostname k8s-node1
#设置192.168.2.170
hostnamectl set-hostname k8s-node2

5. 修改hosts

vi /etc/hosts 

192.168.2.169 k8s-master

192.168.1.90   k8s-node1

192.168.2.170 k8s-node2

6. iptables

#将各节点桥接的IPv4流量传递到iptables的链

#编辑k8s.conf文件
vi /etc/sysctl.d/k8s.conf 

#编辑内容如下
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

#加载br_netfilter模块
modprobe br_netfilter

#查看是否加载
lsmod | grep br_netfilter

#生效
sysctl --system

7. 时间同步

#安装ntpdate
yum install ntpdate -y

#同步时间
ntpdate time.windows.com

8. 开启ipvs

#安装
yum -y install ipset ipvsadm

#在所有节点执行如下脚本

#编辑文件ipvs.modules
vi /etc/sysconfig/modules/ipvs.modules

#内容如下
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

        授权、运行、检查是否加载

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

        检查是否加载

lsmod | grep -e ipvs -e nf_conntrack_ipv4

9. 重启

reboot

三、软件安装

1. docker相关

        设置开机启动

systemctl enable docker

        设置Docker镜像加速器

#创建配置文件路径
sudo mkdir -p /etc/docker

#修改daemon.json
vi /etc/docker/daemon.json

#内容如下
{
  "exec-opts": ["native.cgroupdriver=systemd"],	
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}

#保存完,应用配置
sudo systemctl daemon-reload

#重启docker服务
sudo systemctl restart docker

        添加阿里云的YUM软件源

#编辑kubernetes.repo文件
vi /etc/yum.repos.d/kubernetes.repo

#内容如下
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

2. 各服务器安装 kubeadm、kubelet和kubectl服务

        这里指定1.18.0版本,其他版本安装步骤类似

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

        为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容

vi /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

        设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动

systemctl enable kubelet

3. 部署K8s

       

        master节点操作

        1.由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址

kubeadm init \
--apiserver-advertise-address=192.168.217.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

        2.成功后,复制类似 kubeadm join 192.168.2.169:6443 --token tkvh20.ykj9ht2qavqrndlv \

--discovery-token-ca-cert-hash sha256:e56c4e70cac61255289cc62a81c742a5be3ee50364dd41bbc3dff4d015f3aa25

        

        3.根据提示信息,在Master节点上使用kubectl工具

#创建.kube文件夹
mkdir -p $HOME/.kube

#复制配置内容到.kube文件夹中
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

#
sudo chown $(id -u):$(id -g) $HOME/.kube/config

        4. 部署CNI网络插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

        查看部署CNI网络插件进度:(此处需等待全部完成)

kubectl get pods -n kube-system

        查询节点状态

kubectl get nodes

        查看集群健康状态:

kubectl get cs

        5.其他相关操作(不在部署环节中)

#查询节点信息
kubectl get nodes

#删除配置信息
kubeadm reset

#删除管理组件
yum erase -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

#删除对应docker容器及镜像
docker rm / rmi  xxxxxx

        node节点操作

执行master节点生成的 kubeadm join 192.168.2.169:6443 --token tkvh20.ykj9ht2qavqrndlv \

--discovery-token-ca-cert-hash sha256:e56c4e70cac61255289cc62a81c742a5be3ee50364dd41bbc3dff4d015f3aa25

4.springboot项目部署前言

k8s部署spring项目,按我理解,首先需编写对应的部署yaml,因此需要优先生成spring项目的镜像。可以选择本地获取,也可以选择仓库获取(如dockerhub私人仓库,本地搭建harbor仓库),

本地获取则需要每台服务器都要预先存在镜像,因此,我们选择仓库获取,在部署前,先搭建harbor仓库。

5. harbor搭建

查看文章 harbor搭建

6. spring部署

        

        1. docker登录 harbor账户

# zxg.harbor.com:80 为harbor中配置的
docker login zxg.harbor.com:80
#输入账户 密码
xxxxxx  xxxx

        2. 查看./.docker/config.json

#将内容转成base64格式
cat .docker/config.json |base64 -w 0

        3. 编写 registry-secret.yaml 文件,进行注册harbor

apiVersion: v1
kind: Secret
metadata:
  name: cloud-registry #与下文中部署的yaml对应
  namespace: cloud #命名空间自行修改
data:
  .dockerconfigjson: 生成的base64
type: kubernetes.io/dockerconfigjson #固定为当前



#运行注册文件
kubectl create -f registry-secret.yaml

        4. 编写部署yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: iov-cloud-gateway
  namespace: cloud
spec:
  replicas: 1
  selector:
    matchLabels:
      app: iov-cloud-gateway
  template:  #使用模板生成
    metadata:
      labels:
        app: iov-cloud-gateway
    spec:
      hostNetwork: true
      containers:
        - name: iov-cloud-gateway
        	#此处镜像地址为harbor上镜像地址
          image: xxxx  #harbor上的镜像名称+版本
          imagePullPolicy: IfNotPresent   #表示镜像来源,IfNotPresent本地没有就从hub仓库拉取,Never表示只从本地
          ports:
            - containerPort: 11000
          env:
            # 指定日志文件路径
            - name: logging.path
              value: /var/logs
      imagePullSecrets:
        - name: cloud-registry #加入此配置,表示读取上文中加入的配置,名字需要对应
---
apiVersion: v1
kind: Service
metadata:
  name: iov-cloud-gateway
  namespace: cloud
  labels:
    app: iov-cloud-gateway
spec:
  type: NodePort
  selector:
    app: iov-cloud-gateway
  ports:
    - name: http
      protocol: TCP
      port: 11000 #service(对内)的端口,不能与nodePort重复
      targetPort: 11000 #pod的端口
      nodePort: 11001 #service(对外)的端口,不能与port重复

        5. 运行配置文件

kubectl create -f 文件.yaml


#查看运行成的pods 日志
kubectl logs pod名称 -n 所属命名空间

#访问地址,地址为宿主机IP+nodePort
#nodePort:查看4.5中47行配置,service对外端口,命令查询
kubectl get pods,svc -n cloud

        6. 其他补充

                6.1 nodePort service对外端口范围修改

# 编辑  kube-apiserver.yaml 文件
vim /etc/kubernetes/manifests/kube-apiserver.yaml
# 加入以下内容到 --service-cluster-ip-range 下面一行
- --service-node-port-range=1-65535
# 应用配置
systemctl daemon-reload
# 重启kubectl
systemctl restart kubelet




总结

本文仅作个人学习累积,以便回顾

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值