不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

kubernets学习笔记二

Posted on 2021-03-10 09:35  三年三班王小朋  阅读(77)  评论(0编辑  收藏  举报

Kubernetes部署“容器化应用”

Kubernetes整体架构

何为“容器化应用”? 
通俗点来说,就是你把一个程序放在docker里部署,这个docker应用就是容器化应用。比如,在docker里面部署一个springboot,这个docker+springboot一起就是一个容器化应用

在k8s里面部署一个应用
SpringBoot程序-->打包jar包或war包-->通过Dockerfile文件生成docker镜像-->通过k8s部署这个镜像-->部署完毕;

总结一下Kubernetes部署容器化应用的步骤:
1、制作镜像;(自己编写Dockerfile文件制作,或者 从仓库pull镜像)
2、通过控制器管理pod(其实就是把镜像启动得到一个容器,容器在pod里)
3、暴露应用,以便外界可以访问;

在Kubernetes集群中部署一个Nginx:

1、制作镜像   //第二步包含第一步了,所以不需要docker search nginx;docker build 或 docker pull 镜像名 
2、kubectl create deployment nginx --image=nginx:latest  //拉取镜像,同时启动
3、kubectl expose deployment  nginx --port=80 --type=NodePort  //暴露nginx 
4、访问应用

查看一下,相关命令:

netstat -ntlp  //查看端口

kubectl get node(s)   //查看节点(虚拟主机)
kubectl get deployment (deploy)  //查看控制器
kubectl get pod(s)   //查看pod
kubectl get service(s)   //查看service服务 暴露控制器之后才能看到

kubectl delete deployment nginx   //删除nginx的控制器 底下pod也会被删掉

kubectl get namespace   #查看命名空间
kubectl get deployment -n kube-system  #查看系统创建的控制器
kubectl get deployment -n kube-default  #查看用户创建的控制器
kubectl get deployment -n kube-public

kubectl delete pod nginx-6799fc88d8-zc48m(pod名字) //删除pod
kubectl delete service nginx   //删除service 
kubectl describe pods //查看详情

kubectl --help  //kubectl命令帮助 
访问地址:http://NodeIP:Port

1 [root@k8smaster ~]# kubectl get service
2 NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
3 kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        21h
4 nginx        NodePort    10.106.26.48   <none>        80:30412/TCP   9m22s

 

Docker镜像加速器:
/etc/docker/daemon.json
{
"registry-mirrors": ["https://gg3gwnry.mirror.aliyuncs.com"]
}

科大镜像:https://docker.mirrors.ustc.edu.cn/
网易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
七牛云加速器:https://reg-mirror.qiniu.com

 sudo systemctl daemon-reload
 sudo systemctl restart docker
检验加速器是否成功:
$ docker info
Registry Mirrors:
  https://reg-mirror.qiniu.com

在Kubernetes集群中部署一个Tomcat

1、kubectl create deployment tomcat --image=tomcat  //docker images查看是否下载下来镜像,kubectl get pods/deploy查看下载进度 
2、kubectl expose deployment tomcat --port=8080 --type=NodePort  //kubectl get service查看服务是否开启
访问地址:http://NodeIP:Port

K8s部署微服务(springboot程序)
1、项目打包(jar、war)-->可以采用一些工具git、maven、jenkins
2、制作Dockerfile文件,生成镜像;
3、kubectl create deployment nginx --image= 你的镜像
4、你的springboot就部署好了,是以docker容器的方式运行在pod里面的;

Master控制Node --> service --> deployment(控制器) --> pod --> docker

自定义JDK镜像
FROM centos:latest
MAINTAINER wxp
ADD jdk-8u281-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_251
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java -versionjava
构建镜像:docker build -f /mydocker/Dockerfile3 -t jdk1.8.0_281 .
运行镜像:docker run -d ac84bde53958 (镜像id)

构建项目镜像
FROM jdk1.8.0_281
MAINTAINER wxp
ADD spring-boot-cli-1.4.0.BUILD-20160728.175440-591.jar /opt
RUN chmod +x /opt/spring-boot-cli-1.4.0.BUILD-20160728.175440-591.jar
CMD java -jar /opt/spring-boot-cli-1.4.0.BUILD-20160728.175440-591.jar
构建镜

空运行测试
kubectl create deployment springboot-k8s --image=springboot-k8s-1.0.0-jar --dry-run -o yaml
kubectl create deployment springboot-k8s --image=springboot-k8s-1.0.0-jar --dry-run -o json
kubectl create deployment springboot-k8s --image=springboot-k8s-1.0.0-jar --dry-run -o yaml > deploy.yaml
kubectl create deployment springboot-k8s --image=springboot-k8s-1.0.0-jar --dry-run -o json> deploy.json

XML, JSON和YAML都是文本格式的文件,都可以用来存储结构化的数据,都可以用来配置应用程序。yaml和YAML使用空格缩进,yaml是json的超集

  • 开发人员喜欢JSON,因为它是JavaScript的子集,并且可以在JavaScript内部直接解释和编写,还可以使用简写方式声明JSON,在使用不带空格的典型变量名时,键中不需要双引号。在许多情况下,YAML的格式看起来更直观,不需要这么些括号{}和"". 如果您在编辑器中没有可见的空格或缩进线指示符,则YAML的空格虽然更紧凑且更易于查看,但看起来很难手动编辑。
  • 与YAML相比,JSON的功能要少得多,因此JSON的序列化和反序列化速度要快得多,这使得更小更轻的代码可以处理JSON, json对于平台兼容,尤其是消息传递这块更好.。
  • python中模型的配置文件都是yaml格式----脱机处理,
  • yaml利用空格缩进表示层级,只要具有相同的缩进就具有相同的层级,而且缩进只能用空格.yaml字符串可以不用引号标注; json的字符串对象必须使用双引号""
  • 大小写敏感

Yml文件方式部署(也可以通过命令部署)
kubectl apply -f boot-deploy.yaml  (yaml是资源清单)
等价于:
kubectl create deployment springboot-k8s --image=38-springboot-k8s-1.0.0-jar
部署后查看一下:kubectl get pods
注意:boot-deploy.yaml文件里面镜像从本地拉取;

containers:
      - image: 38-springboot-k8s-1.0.0-jar
        name: 38-springboot-k8s-1-0-0-jar-8ntrx
        imagePullPolicy: Never

把镜像拉取策略改为:Never
查看pod详细信息:kubectl describe pods 38-springboot-k8s-5c5c46d65f-4s52c(pod名称)
检查是否创建了deployments任务:kubectl get deployments
查看pod日志:kubectl logs 38-springboot-k8s-575778f6bf-drmbm(pod名称)
暴露服务端口:kubectl expose deployment springboot-k8s --port=8080 --type=NodePort

命令方式部署
kubectl create deployment springboot-k8s --image=38-springboot-k8s-1.0.0-jar