简单部署k8s及spring项目发布

导读:本篇文章讲解 简单部署k8s及spring项目发布,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


前言


一、环境准备

三台服务器,操作系统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

简单部署k8s及spring项目发布

        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


总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/70368.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!