虚拟机vmware:Centos7
ip:192.168.146.132
内存:1G
硬盘:20G
1、关闭CentOS自带的防火墙
systemctl disable firewalld
systemctl stop firewalld
2、安装etcd和Kubernetes软件(会自动安装Docker软件)
yum install -y etcd kubernetes
3、修改配置文件
修改/etc/sysconfig/docker,修改为:
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'
Kubernetes apiserver配置文件/etc/kubernetes/apiserver中,把--admission_control参数中的ServiceAccount删除
4、配置CentOS证书
参考内容:Kubernetes创建pod一直处于ContainerCreating排查和解决
因为拉取gcr.io的镜像需要redhat的证书,但是系统默认是没有的,所以,这里我们自己添加。
安装rhsm
yum install -y *rhsm*
通过python-rhsm-certificates的rpm包获得证书:
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
安装完成后,执行一下docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
5、配置docker阿里云镜像加速
这个镜像仓库是我个人在阿里云申请的:
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ckq4qobq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl deamon-reload
systemctl restart docker
6、启动所有服务
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
从github上下载需要的yaml文件:
需要用到的是 java_web_app 文件夹内内容
下载地址:https://github.com/bestlope/k8s_practice
或者:git clone https://github.com/bestlope/k8s_practice.git
1、搭建mysql服务
cd k8s_practice/java_web_app/mysql
#启动mysql的RC服务
kubectl create -f mysql-rc.yaml
#查看刚刚创建的RC
kubectl get rc
#查看pod创建的情况
kubectl get pods
#启动mysql的SVC服务
kubectl create -f mysql-svc.yml
#查看刚刚创建的service
kubectl get svc
2、启动tomcat应用
cd k8s_practice/java_web_app/tomcat
#创建tomcat的RC服务
kubectl create -f myweb-rc.yaml
#创建tomcat的SVC服务
kubectl create -f myweb-svc.yaml
3、通过浏览器访问网页
访问:http://192.168.146.132:30001/
成功看到跳转到Tomcat页面,即成功单机版 K8S 搭建。
开发一个spring boot 项目 基于JPA操作MySQL的CRUD.
核心配置文件:
Dockerfile:
FROM openjdk:8-jdk-alpine
#将本地文件挂到到/tmp目录
VOLUME /tmp
#复制文件到容器
ADD spring-boot-docker-1.0.jar /app.jar
#暴露8080端口
EXPOSE 8081
#配置启动容器后执行的命令
ENTRYPOINT ["java","-jar","/app.jar"]
k8s-app-mysql.yaml
apiVersion: v1
kind: Service
metadata:
name: k8s-app
namespace: default
labels:
app: k8s-app
spec:
type: NodePort
ports:
- port: 8081
nodePort: 30002
selector:
app: k8s-app
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: k8s-app
labels:
app: k8s-app
spec:
replicas: 1
selector:
matchLabels:
app: k8s-app
template:
metadata:
labels:
app: k8s-app
spec:
containers:
- name: k8s-app
image: k8s-mysql:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8081
livenessProbe:
httpGet:
port: 8081
path: /
scheme: HTTP
periodSeconds: 15
initialDelaySeconds: 30
pom.xml : 配置项目依赖与Docker插件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.neo</groupId>
<artifactId>spring-boot-docker</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>spring-boot-docker</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
</project>
后台部署:
docker build -t k8s-mysql . 构建镜像
docker images 查询构建的镜像
kubectl create -f k8s-app-mysql.yaml 创建k8s管理的service 、deployment 对外暴露服务
最终效果先展示一下:
1、左连接:var LeftJoin = from emp in ListOfEmployeesjoin dept in ListOfDepartmenton emp.DeptID equals dept.ID into JoinedEmpDeptfrom dept in JoinedEmpDept.DefaultIfEmpty()select new {EmployeeName = emp.Name,DepartmentName = dept
1摘要验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的防火墙功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻。本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义。文章更新:2017-09-20本文的基于传统的机器学习SVM的源码共享:介绍文章:http://www.cnblogs.com/bee...
打开ArcMap,选择ArcToolbox->Conversion Tools->From KML->KML To Layer在打开的对话框中选择Input KML File,其他选项默认即可。本次所选择的kml文件中包含了点和线。点击ok,弹出进度条对话框,转换完成以后对话框自动关闭。...
想先讲一下,关于输入字符串输入如果是单个字符输入 要在输入前后都要加上 getchar() 读取空字符个人经验,如有错误请指出。原博地址:https://blog.csdn.net/jzqt_t/article/details/38315675许多ACMer在做ACM题时经常会被一些字符串输入搞混,如果认为几个字符串输入函数的功能基本一样那就大错特错了。今天把C语言中的三个字符串输入函数(scan...
目前pyinstaller稳定版Release 3.2.1: stable, supports Python 2.7, 3.3–3.5,不支持python 3.6(可以安装,但无法使用)。使用3.6的亲们可以使用“pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz”命令安装最新的开发版pyins...
traceroute命令详解traceroute [-46dFITUnrAV] [-f first_ttl] [-g gate,...] [-i device] [-m max_ttl] [-p port] [-s src_addr] [-q nqueries] [-N squeries] [-t tos] [-l flow_label] [-w wait...
原文链接️ 关注霍格沃兹测试学院公众号,回复「面试」,领取测试开发面试真题合集!编者按:本文是霍格沃兹测试学院学员 @XiaoW 分享的测试人生故事,作为学习群阳光活跃的“学习小王子”,背后竟有如此曲折和令人钦佩的经历,这种积极向上的力量极具感染力,也发人深省,当幸福来敲门时,你是否做好了准备?在霍格沃兹测试学院收获很多,应学院的邀请,分享下我个人的测试技术成长经历,深感荣幸,请大家多多指教!为告别频繁出差,从传统制造业转向 IT 行业我转行进入 IT 行业有 2 年多时间了,在这之前,一直
作者:桂。时间:2017-03-24 06:52:36链接:http://www.cnblogs.com/xingshansi/p/6609317.html 声明:欢迎被转载,不过记得注明出处哦~ 【读书笔记03】前言西蒙.赫金的《自适应滤波器原理》第四版,上一篇看到维纳滤波基本形式:最优化问题,且无任何条件约束。这次看到有约束的部分,简单整理一下思路: ...
在一个md5解密交流群看到有人讨论MD5算法解密,消息有上百条,但是具体怎么解密却没人讨论。所以,今天就这个话题浅谈一下MD5摘要算法的几种解密方法,以及分享使用MD5免费解密网站如何进行md5加密解密,大家可要轻点喷。...
在hive中创建表是有如下一个语句[ROW FORMAT row_format]row_format 的类型有如下:file_format:: SEQUENCEFILE| TEXTFILE -- (Default, depending on hive.default.fileformat configuration)| RCFILE -- (Note: Available in H...
Uncaught SyntaxError: Unexpected token <