前言
一、环境准备
三台服务器,操作系统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
总结
本文仅作个人学习累积,以便回顾
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/70368.html