kubernetes基本概念

Pod:

1.最小的部署单元,
2.一组容器的集合
3.一个pod中的容器共享网络命名空间
4.生命周期是短暂的


 

Controllers:

1.Deployment:部署无状态应用
2.Statefulset:部署有状态应用
3.Replicaset:确保预期的Pod副本数量
4.Daemonset: 确保node运行同一个pod
5.Job:一次性任务
6.Cronjob:定时任务
更高级层次对象,部署和管理pod


 

Service:

防止Pod失联,找到你需要Pod
定义一组Pod的负载均衡访问策略


 

Label:​​标签,附加到某个资源上,用于关联对象,查询和筛选​

Namespaces:​​命名空间,将对象进行逻辑上隔离或者资源隔离​

项目迁移到k8s平台是怎么样的流程?

K8S实战之部署java应用【转】_k8s

​基础镜像(一个空白的镜像)---------------运行环境镜像(py/php/go/java)---------------项目镜像(项目打包)​

实战项目开始


服务器ip

服务器名称

192.168.106.102

k8s-master

192.168.106.103

k8s-node01

192.168.106.104

k8s-node02

192.168.106.103

mysql数据库


1.0将java源码程序项目包导入到master服务器上,如图所示

K8S实战之部署java应用【转】_docker_02

1将db目录下数据文件导入mysql中(node01)

#192.168.106.103数据库执行

source  /root/tables_ly_tomcat.sql
grant all on test.* to 'test'@'%' identified by "Zhangfan@123"; #增加一个授权用户,在master登录能正常登录


修改连接数据库的配置文件,改成刚才数据授权的用户和ip

vim src/main/resources/application.yml

K8S实战之部署java应用【转】_tomcat_03

2开始制作镜像java镜像(master)

我在之前的博文中讲了如何构建java镜像

FROM centos:7                    
MAINTAINER zhangfan
ENV VERSION=8.5.61
RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
yum clean all && \
rm -rf /var/cache/yum/*
RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
tar zxf apache-tomcat-${VERSION}.tar.gz && \
mv apache-tomcat-${VERSION} /usr/local/tomcat && \
rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
mkdir /usr/local/tomcat/webapps/test && \
echo "ok" > /usr/local/tomcat/webapps/test/status.html && \
sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/tomcat/bin
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["catalina.sh", "run"]


 

#安装编译环境

yum -y install java-1.8.0-openjdk maven

cd      /root/tomcat-java-demo-master
vim src/main/resources/application.yml #修改配置文件指定刚才创建用户的数据库
mvn clean package -Dmaven.test.skip=true


 

#编译完成如图所示,生成一个war包

K8S实战之部署java应用【转】_k8s_04

制作新Dockerfile

cat  Dockerfile 
FROM tomcat:v1
LABEL test www.zhangsan.com
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war


 

#注意这里命名 ​​zhangfan5391621/java-demo​​ zhangfan5391621表示docker hub仓库登录名/java-demo为项目名

docker build -t zhangfan5391621/java-demo .

K8S实战之部署java应用【转】_apache_05

构建完成如图所示,新项目镜像构建完成

3将镜像推入docker hub仓库中

https://hub.docker.com/repository/docker/zhangfan5391621/zf_test

K8S实战之部署java应用【转】_tomcat_06

docker push zhangfan5391621/java-demo #上传到docker hub仓库中去

K8S实战之部署java应用【转】_java_07

4生成k8s-Pod

kubectl create deployment java-demo --image=zhangfan5391621/java-demo --dry-run -o yaml > deploy.yaml

#在本地生成一个yaml标准文件

cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: java-demo
name: java-demo
spec:
replicas: 3 #三个副本
selector:
matchLabels:
app: java-demo
template:
metadata:
labels:
app: java-demo
spec:
containers:
- image: zhangfan5391621/java-demo
name: java-demo


 

kubectl apply -f  deploy.yaml   #构建pod
kubectl get pods #全部状态running说明构建成功


 

K8S实战之部署java应用【转】_java_08

#检查pod日志,无错误说明成功,如果报错状态不对用下面命令检查

`kubectl describe nodes  k8s-node01   #检查node`
`kubectl logs java-demo-876cf6688-57jzf`


 

5 暴露应用svc

 kubectl  expose deployment  java-demo  --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run > svc.yaml


 

​java-demo :刚才创建deployment时的名称, --port=80:容器内部访问端口 --target-port=8080 :指定pod内部端口 --type=NodePort: 指定外部访问的端口为随机生成端口​

kubectl apply  -f     svc.yaml   #创建svc
kubectl get pods,svc


 

K8S实战之部署java应用【转】_java_09

http://192.168.106.102:30187/ #任意节点ip:30187都能正常访问

K8S实战之部署java应用【转】_docker_10

至此项目部署完成

整个完成顺序是

​构建环境镜像----------构建项目镜像----------推送到hub仓库----------构建Pod----------暴露应用svc​