栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

简单部署k8s及spring项目发布

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

简单部署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




总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509919.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号