jar k8s 自己的 部署_微服务架构 - 离线部署k8s平台并部署测试实例
一般在公司部署或者真实环境部署k8s平台,很有可能是内网环境,也即意味着是无法连接互联网的环境,这时就需要离线部署k8s平台。在此整理离线部署k8s的步骤,分享给大家,有什么不足之处,欢迎指正。
1、准备环境
这次离线部署k8s的版本为v1.10.1,同时docker的版本为17.12.0-ce,不过本文章不介绍如何离线部署docker,如果大家要看的话,可以看本人之前写的文章《CentOS7离线部署docker》
本人准备的环境是3台虚拟机,也即1台master节点,2个node节点,ip及配置如下:
主机名
IP
内存
k8s-master
192.168.197.131
2G
k8s-node-1
192.168.197.132
1G
k8s-node-2
192.168.197.133
1G
2、设置环境
(1)、所有节点关闭防火墙,操作命令如下:
systemctl stop firewalld
systemctl disable firewalld
(2)、所有节点关闭selinux,操作命令如下:
setenforce 0
同时编辑/etc/selinux/config,使其中SELINUX=disabled
(3)、所有节点关闭swap,操作命令如下:
swapoff -a
同时编辑/etc/fstab,注释掉含有swap的这一行
(4)、所有节点设置系统参数,操作如下命令:
cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
3、安装kubeadm、kubelet、kubectl
相关的rpm安装包,已经提前下载好了,需要如下文件:
在每个节点都安装这些rpm安装包,安装命令如下:
rpm -ivh *.rpm
设置Cgroup Driver,由于kubelet的Cgroup Driver为systemd,而docker的Cgroup Driver信息可以通过:
docker info
返回的信息为:
可以发现docker的Cgroup Driver为cgroupfs,为此将kubelet的Cgroup Driver修改为cgroupfs,即修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf,将其中的cgroup-driver=systemd改为cgroupfs
注意:所有节点kubelet的Cgroup Driver都要修改为cgroupfs
所有节点重设kubelet服务,并重启kubelet服务,同时设置为开机自启动,即:
systemctl daemon-reload && systemctl restart kubelet
systemctl enable kubelet
4、准备镜像
相关要用到的镜像,已经提前下载好了(文章最后会提供下载所有安装文件的地址),只需要用docker load命令将镜像导入即可,注意所有的节点都需要导入这些镜像, 镜像列表如下:
5、部署master节点
通过kubeadm初始化master节点,在master节点上执行:
kubeadm init --kubernetes-version=v1.10.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.197.131
由于在此网络配置采用flannel,所以--pod-network-cidr设置为10.244.0.0/16
该命令执行完后,如果看到如下结果,则表示初始化成功,即:
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.197.131:6443 --token io9qub.vnikk4mxx2vr3g05 --discovery-token-ca-cert-hash sha256:9353632362d10d676b6ad69cd7675bf2facd71e265ffcf1b69a9bcd4d0e2dd3e
则需要按照提示,执行如下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
同时将其它node节点加入k8s集群命令记好,等下后面需要用到的。
紧接着在master节点部署网络插件flannel,这时可以通过kubectl命令来安装,即:
kubectl apply -f kube-flannel.yml
注意:kube-flannel.yml文件,可以在https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml获取到,当然文章最后提供的安装包里面也有该文件的。
此时可以查看master的状态,即输入如下命令:
kubectl get nodes
结果为:
可见看到master的状态为Ready,即表明master节点部署成功!
6、加入node节点
加入node节点的操作就很简单了,只需要将上面初始化master节点成功后返回的join命令,在所有node节点上执行即可,即:
kubeadm join 192.168.197.131:6443 --token io9qub.vnikk4mxx2vr3g05 --discovery-token-ca-cert-hash sha256:9353632362d10d676b6ad69cd7675bf2facd71e265ffcf1b69a9bcd4d0e2dd3e
如果这个join命令忘记保存,可以在master节点执行如下命令获取join命令的:
kubeadm token create --print-join-command
所有的node节点都加入后,可以在master节点执行命令查看各个节点的状态,即:
kubectl get nodes
结果为:
由上可知所有节点的状态都Ready,说明部署成功了!
也可查看一下所有pod的状态,即执行:
kubectl get pods --all-namespaces
结果为:
7、自定义证书并部署dashboard
在master节点的/root/k8s/ssl目录下制作证书:
(1)、生成私钥:
openssl genrsa -out ca.key 2048
(2)、生成自签名证书:
openssl req -new -x509 -key ca.key -out ca.crt -days 3650 -subj "/C=CN/ST=HB/L=WH/O=DM/OU=YPT/CN=CA"
(3)、生成dashboard私钥:
openssl genrsa -out dashboard.key 2048
(4)、申请签名请求:
openssl req -new -sha256 -key dashboard.key -out dashboard.csr -subj "/C=CN/ST=HB/L=WH/O=DM/OU=YPT/CN=192.168.197.131"
(5)、创建配置文件dashboard.cnf ,内容如下:
extensions = san
[san]
keyUsage = digitalSignature
extendedKeyUsage = clientAuth,serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = IP:192.168.197.131,IP:127.0.0.1,DNS:192.168.197.131,DNS:localhost,DNS:k8s-master
(6)、签发证书:
openssl x509 -req -sha256 -days 3650 -in dashboard.csr -out dashboard.crt -CA ca.crt -CAkey ca.key -CAcreateserial -extfile dashboard.cnf
(7)、将证书信息放到secret中:
kubectl create secret generic kubernetes-dashboard-certs --from-file="dashboard.crt,dashboard.key" -n kube-system
(8)、安装kubernetes-dashboard.yml,即执行:
kubectl apply -f kubernetes-dashboard.yml
其中kubernetes-dashboard.yml文件文章最后的安装包里面会提供。
(9)、设置dashboard的admin权利:
由于kubernetes-dashboard绑定的角色为kubernetes-dashboard-minimal,为了提供admin权限则需要执行:
kubectl apply -f kubernetes-dashboard-rbac-admin.yml
其中 kubernetes-dashboard-rbac-admin.yml文件文章最后的安装包里面会提供。
(10)、查看pod、svc状态
输入kubectl get pods --all-namespaces,可以看到有这么一条信息:
kube-system kubernetes-dashboard-7d5dcdb6d9-nszwk 1/1 Running 1
输入kubectl get svc -n kube-system,可以看到有这么一条信息:
kubernetes-dashboard NodePort 10.107.115.153 443:31195/TCP
此根据NodePort模式下,对外访问dashboard的端口为31195,即:在浏览器中输入:
https://192.168.197.131:31195
注意是https协议。
可看到如下页面:
可以通过令牌的访问方式进入,即首先得获取令牌信息:
(1)、首先得到kubernetes-dashboard-admin的secret记录,即:
kubectl get secret --all-namespaces | grep kubernetes-dashboard-admin
得到的结果为:
kube-system kubernetes-dashboard-admin-token-75pdg kubernetes.io/service-account-token 3
(2)、获取token值,即通过上面secret结果,然后执行如:
kubectl describe secret kubernetes-dashboard-admin-token-75pdg -n kube-system
得到的结果为:
这个token值输入到浏览器中令牌所需要的内容即可以登录,即:
8、部署自定义测试实例
本人通过SpringBoot写了一个简单的工程,只有一个测试方法,即:
package com.swnote.k8s.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试类
*
* @author lzj
* @date [2019-03-16]
*/
@RestController
public class TestController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "架构与我,欢迎关注!";
}
}
然后将本工程打成jar包,然后通过Dockerfile文件打成镜像,Dockerfile文件如下:
FROM java:8
VOLUME /tmp
ADD k8s-jgyw-1.0.jar app.jar
#RUN bash -c 'touch /app.jar'
EXPOSE 80
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
执行打镜像的命令:
docker build -t k8s-jgyw:1.0 .
注意所有的节点都需要k8s-jgyw:1.0镜像,然后部署该实例k8s-jgyw.yml如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: jgyw
labels:
app: k8s-jgyw
spec:
replicas: 1
selector:
matchLabels:
app: k8s-jgyw
template:
metadata:
labels:
app: k8s-jgyw
spec:
containers:
- name: jgyw
image: k8s-jgyw:1.0
ports:
- containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: jgyw
labels:
app: k8s-jgyw
spec:
type: NodePort
selector:
app: k8s-jgyw
ports:
- protocol: TCP
port: 80
targetPort: 80
执行部署命令:
kubectl apply -f k8s-jgyw.yml
然后svc信息,获取对外访问的端口,即:
kubectl get svc
返回结果为:
jgyw NodePort 10.97.250.52 80:32461/TCP
则通过浏览器访问如下地址:
http://192.168.197.131:32461
结果如下:
说明测试实例部署成功了!
9、安装包下载地址
安装包的下载为https://pan.baidu.com/s/1r0OkljXdmXx37h9aHDLDDg,提取码为:m11n
关注我
以你最方便的方式关注我:
微信公众号:
jar k8s 自己的 部署_微服务架构 - 离线部署k8s平台并部署测试实例相关推荐
- 基于docker部署的微服务架构(九): 分布式服务追踪 Spring Cloud Sleuth
为什么80%的码农都做不了架构师?>>> 前言 微服务架构中完成一项功能经常会在多个服务之间远程调用(RPC),形成调用链.每个服务节点可能在不同的机器上甚至是不同的集群上,需 ...
- 异构服务器 微服务_微服务架构是什么?
如果你懂或者不理解,希望你看到这篇文章之后就能搞懂. 以下: 正文 看到最近"微服务架构"这个概念这么火,作为一个积极上进的程序猿,成小胖忍不住想要学习学习.而架构师老王(不是隔壁 ...
- 基于java基于微服务架构的在线音乐平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java基于微服务架构的在线音乐平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于微服务架构的在线音乐平台计算机毕业设计源码+系统+lw文档+mysql数据库+调 ...
- (转)微服务架构 互联网保险O2O平台微服务架构设计
http://www.cnblogs.com/Leo_wl/p/5049722.html 微服务架构 互联网保险O2O平台微服务架构设计 关于架构,笔者认为并不是越复杂越好,而是相反,简单就是硬道理也 ...
- 51信用卡在微服务架构下的监控平台架构实践
一.背景介绍 51信用卡的技术架构是基于Spring Cloud所打造的微服务体系,随着业务的飞速发展,不断增多的微服务以及指标给监控平台带来了极大的挑战.监控团队在开源vs自研,灵活vs稳定等问题上 ...
- nacos 本地测试_微服务架构系列之Nacos 配置核心概念
上次讲了<微服务架构之Nacos配置中心之配置MySQL数据库>,本次讲述Nacos 配置核心概念.原作者:哈喽沃德先生,谢谢关注哈喽沃德先生. 1.配置 为什么需要配置?概念. 在系统开 ...
- EDAS 4.0 助力企业一站式实现微服务架构转型与 K8s 容器化升级
作者:安绍飞 审核&校对:营火 编辑&排版:雯燕 前言 近年来,企业的数字化随着互联网的普及发展越来越快,技术架构也是几经更迭,尤其是在线业务部分.最开始企业的需求就是将业务尽可能在线 ...
- 基于docker部署的微服务架构(四): 配置中心
原文:http://www.jianshu.com/p/b17d65934b58%20 前言 在微服务架构中,由于服务数量众多,如果使用传统的配置文件管理方式,配置文件分散在各个项目中,不易于集中管理 ...
- go与Java微服务对比_微服务架构对比-Go语言中文社区
最近使用Docker+SpringCloud来代替Zookper+Dobbo来做微服务,总结如下 现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性.同时,支持微服务的技 ...
最新文章
- fetch 跨域请求
- Visual Studio 2008 和 .NET 3.5 发布了
- 亿佰特串口服务器接入阿里云MQTT协议的软件配置教程
- ivx中字体显示_iVX云服务费用优化 · 上篇
- 虚拟化解决方案 并不仅限于SDN
- poj 2632 Crashing Robots
- StikyNotes便签软件
- STM32F1基于正点原子HAL库IIC驱动SH1106芯片的OLED屏
- 圣科车衣,给予您的爱车完美守护
- Oracle Sqlplus显示不足问题
- Python拆分PPT文件的方法
- scipy 三次样条插值
- 期末总结——Spark
- wordpress后台管理(七)说说管理:发表说说、所有说说
- 游戏服务器框架概括分析
- 一个机器人,主要由哪几部分组成?
- javascript 原生
- MONGODB 开发架构设计与模型设计
- Mandala Coloring Book Game ver 1.2 - 曼陀羅著色遊戲U3D源碼
- 吸烟者问题(有例题!!!)
热门文章
- java tomcat 读取配置文件端口_跟我学Java编程—应用读写项目配置文件的Properties类...
- 创建mysql用户并在单个数据库上赋权
- 让AIX下的sqlplus也支持回显功能
- sql union 行数不同_十八般武艺玩转GaussDB(DWS)性能调优(二):坏味道SQL识别
- 8080端口被占用怎么解决_端口占用不会搞?两行命令就解决!
- lisp新建标注式样_[求助]请教一下,如何编定义标注样式的LSP?
- sqlserver varchar 对于 sum 运算符无效_在sqlserver上实现自定义函数四舍六入五成双...
- springboot配置请求头大小
- Vue中使用echarts图表插件
- win10家庭版如何开启组策略