Kubernetes1-Jenkins+K8s[待更新]

\===
  1. 服务docker化(打包->Dockerfile->docker run)
    jar里的配置文件${mysql.address}可以在docker run --mysql.address=**.**.中配置
  2. 推送到docker仓库
    2.1 docker pull registry(从hub.docker.com)上拉取私有仓库
    2.2 vmvare/harbor
  3. k8s
docker

其他文章已介绍
文章连接1
文章连接2

服务编排框架 >K8s

其他服务编排:Apache Mesos,Docker Swarm ,Google Kubernetes
Borg,它是Google内部使用的一个超大规模集群管理系统,它基于容器技术,目的是实现资源管理自动化
Kubernetes(简称K8s)可理解为Borg的一个开源版本
Kubernetes是一个开放的开发平台,无论是Go、Java或Python编写的服务,都可以轻松映射为Kubernetes的Service,并通过标准的TCP通信协议进行交互,因此现有系统可以非常容易的迁移到Kubernetes平台上。

  • 自动化部署
  • 大规模可伸缩(自动化复制,失效则替换)
  • 应用容器化管理,可以自动升级
  • 提供负载均衡

>架构设计

Kubernetes1-Jenkins+K8s[待更新]_第1张图片
master: 主服务器
     - kube-dns整个集群中dns,可以通过名字访问pod
     - Scheduler:将未分发的pod绑定到可用的node节点上,存到etcd中
          调度解决方案preselect预选规则
           NodiskConflict挂载冲突 CheckNodeMemoryPressure检查节点内存压力 NodeSelector节点选择器 FitResource Affinity亲和性
     - Controller Manager:维护状态,扩容,根据etcd中的信息,调用node中的kubelet创建pod 并且监控运行状况
     - etcd:[DB]API server将处理结果存入高可用键值存储系统etcd中

node: 用于部署应用的服务器
Pod: 基本操作单元,也是一组容器(container)和卷(volume)的载体,整个kubernetes系统都是围绕着Pod展开(部署运行,保证数量,访问pod)
每个pod被分配一个独立的IP地址,pod中的每个容器共享网络命名空间,包括IP地址和网络端口。pod内的容器可以使用localhost相互通信。

Service:[逻辑存在] 定义 多个Pod 组成一个什么服务(选择pod),service可以对外提供负载均衡
Pod不一定是同一个应用,可以是同一个应用的不同版本
Kubernetes1-Jenkins+K8s[待更新]_第2张图片 Kubernetes1-Jenkins+K8s[待更新]_第3张图片
     - 如何确定哪些Pod是一个Service? Label Selector: 定义service时指定标签,确认哪个service有哪些pod
     - kube-proxy: Service内部的服务发现和负载均衡
     - pod是短暂的,那么重启时IP地址可能会改变,这时可以使用Service

Deployment: 定义了Pod部署的信息(副本数,环境变量)
Kubernetes1-Jenkins+K8s[待更新]_第4张图片

>Kubernetes网络

CNI
Flannel,Calico,Weave
Pod网络

>安装(点击参考其他文章)

K8s是靠主机名识别节点的,主机名不可相同
两台虚拟机:桥接模式(可以连接外网)
都要安装docker
都要安装kubeadm,kubelet和kubectl
都要禁用虚拟内存

Debian / Ubuntu
# Linux swapoff命令用于关闭系统交换区(swap area)。 -a 将/etc/fstab文件中所有设置为swap的设备关闭
swapoff -a 

apt-get update && apt-get install -y apt-transport-https

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list

deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

>基本命令 管理K8S

检查node是否readykubectl get node
检查所有pod是否正常kubectl get pod --all-namespaces -o wide
在node上执行kubeadm reset可以断开node,然后重新join
在master上执行kubeadm reset可以重新init

1.deployment

查看kubectl get deployment --all-namespaces

删除kubectl delete deployment namexxx
获取deployment描述信息
kubectl describe deploy xxxx
扩容4
kubectl scale deploy deploy_name --replicas=4
创建运行
kubectl run xx --image -port
更新镜像
kubectl set image deploy deploy名 容器名=新镜像:版本
查看结果
kubectl rollout status deploy deploy名
回滚操作
kubectl rollout undo deploy deploy名

2.service

查看kubectl get service --all-namespaces
创建servicekubectl create -f test.yml

3.pod

查看全部namespace的pod kubectl get po --all-namespaces
kubectl get po --all-namespaces -o wide

查看某个namespace下的pod kubectl --namespace kube-system get po
kubectl describe pod xxxx

复制文件 kubectlsqc cp smartlink-sqc-wordle-5d4548d948-q4m6x:usr/local/wordle-py/data/cdr_data-3004870-3004870-20190701-30.csv /tmp

查看日志
kubectl --namespace clink2 logs clink2-realtime-p244h

>配置文件 管理K8S

1.pod
apiVersion: v1
kind: Pod
metadata: 
	name: nginx
spec:
	containers:
	- name: nginx
	  image: nginx:1.7.9
	  ports: 
	  - containerPort: 80

创建kubectl create -f nginx-pod.yaml 创建pod不会创建deploy

2.deployment
apiVersion: apps/v1beta1
kind: Deployment
metadata:
	name: nginx-deployment
spec:
	replicas: 2 # 副本
	template:
		metadata: 
		  	labels:
		  		app: nginx
		spec:
			containers:
			  - name: nginx
				image: nginx:1.7.9
				ports:
				  - containerPort: 80

创建kubectl create -f nginx-deployment.yaml kubectl apply -f test.yaml
删除kubectl delete -f test.yaml

jenkins-自动化搭建测试环境 > jenkins.io

springboot如何使用jenkins打包构建

http://www.ityouknow.com/springboot/2017/11/11/spring-boot-jenkins.html

下载war / java -jar xxx.war启动
访问:localhost:8080

1.继续安装插件

系统管理->管理插件->可选插件->
rebuilder 每次构建不用重新输入参数
safe restart 安全重启jenkins

2. 系统管理->

2.1 安全配置

configuration global security->授权策略->安全矩阵

2.1 用户管理

新建用户等用户操作

开发自动化部署任务

1.git同步最新的代码

2. maven打包

3. 停止tomcat,部署应用

4. 启动tomcat

你可能感兴趣的:(架构/项目部署/构建)