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

其他文章已介绍

服务编排框架 >K8s

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

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

>架构设计

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不一定是同一个应用,可以是同一个应用的不同版本

     - 如何确定哪些Pod是一个Service? Label Selector: 定义service时指定标签,确认哪个service有哪些pod
     - kube-proxy: Service内部的服务发现和负载均衡
     - pod是短暂的,那么重启时IP地址可能会改变,这时可以使用Service

Deployment: 定义了Pod部署的信息(副本数,环境变量)

>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

HELM

Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来管理 Charts。有点类似于 Ubuntu 中的 APT 或 CentOS 中的YUM。

Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。

概念

  • Helm (客户端)
    Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
  • Tiller (服务器)
    Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。
  • Chart (软件包)
    Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。
  • Repoistory (Chart 软件仓库)
    Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
  • Release
    使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。

https://blog.csdn.net/bbwangj/article/details/81087911

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值