【云原生】docker+k8微服务容器化实战_k8 微服务

2.rpc通讯

3.跨语言调用


一、Docker

1.服务docker化

部署user-service
  • 编写Dockfile文件
#源镜像
FROM golang:1.13

#设置工作目录
WORKDIR $GOPATH/src

RUN mkdir user-service

COPY user-service $GOPATH/src/user-service


#切换工作目录
WORKDIR $GOPATH/src/user-service

RUN mkdir log

#暴露端口
EXPOSE 9090

#最终运行docker的命令
ENTRYPOINT  ["nohup","./user-service",">log/log.log", "&"]

  • 编写build.sh脚本
#!/bin/bash
rm -rf user-service
go build .
docker build -t mic-user-service -f Dockerfile .

执行build.sh构建镜像

  • 编写start.sh脚本
#!/bin/bash
docker stop mic_user_service
docker rm mic_user_service
docker run -p 9090:9090 --name mic_user_service -v /usr/local/docker/micservice/user-service/log:/go/src/user-service/log  -d mic-user-service

启动容器 ./start.sh

user-server服务依赖mysql服务,请访问 docker搭建mysql

部署user-edge-service
  • 编写Dockfile文件
#源镜像
FROM golang:1.13

#设置工作目录
WORKDIR $GOPATH/src

RUN mkdir user-edge-service

COPY user-edge-service $GOPATH/src/user-edge-service
COPY config.ini $GOPATH/src/user-edge-service


#切换工作目录
WORKDIR $GOPATH/src/user-edge-service
RUN mkdir log


#暴露端口
EXPOSE 9091

#最终运行docker的命令
ENTRYPOINT  ["nohup","./user-edge-service",">/dev/null", "&"]

  • 编写build.sh脚本
#!/bin/bash
rm -rf user-edge-service
go build .
docker build -t mic-user-edge-service:latest

执行build.sh构建镜像

  • 编写start.sh脚本
#!/bin/bash
docker stop mic_user_edge_service
docker rm mic_user_edge_service
docker run -p 9091:9091 --name mic_user_edge_service -v /usr/local/docker/micservice/user-edge-service/log:/go/src/user-edge-service/log -d mic-user-edge-service

启动容器 ./start.sh

  • 访问user-edge-service服务测试

http://172.16.57.110:9091/adapi/login

使用docker-compose编排容器

上面的方式需要一个一个单独启动容器服务,我们可以是用docker-compose来管理容器

  • 安装docker-compose

yum install docker-conpose

  • 编写docker-compose.yml
version: '3'

networks:
  default:
    external:
      name: micservice-network

services:
  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    volumes:
      - /usr/local/docker/mysql/conf:/etc/mysql
      - /usr/local/docker/mysql/logs:/var/log/mysql
      - /usr/local/docker/mysql/data:/var/lib/mysql
    environment:
      - TZ="Asia/Shanghai"
  redis:
    image: redis:5.0.4
    ports:
      - 6379:6379
    volumes:
      - /usr/local/docker/redis/logs:/usr/local/redis/logs
      - /usr/local/docker/redis/redis.conf:/etc/redis_default.conf
      - /usr/local/docker/redis/data:/data
    environment:
      - TZ="Asia/Shanghai"
  mongo:
    image: mongo:latest
    ports:
      - 27017:27017
    volumes:
      - /usr/local/docker/mongo/data:/data/db
      - /usr/local/docker/mongo/conf/mongodb.cnf:/etc/mongo.conf
    environment:
      - TZ="Asia/Shanghai"
  user-service:
    image: mic-user-service:latest
    ports:
      - 9090:9090
    volumes:
      - /usr/local/docker/micservice/user-service/log:/go/src/user-service/log
    environment:
      - TZ="Asia/Shanghai"
  user-edge-service:
    image: mic-user-edge-service:latest
    ports:
      - 9091:9091
    links:
      - user-service
    volumes:
      - /usr/local/docker/micservice/user-edge-service/log:/go/src/user-edge-service/log
    environment:
      - TZ="Asia/Shanghai"

  • 相关命令
#启动所有服务
 docker-compose up -d 
 #启动某个
 docker-compose up user-service -d 
 # 停止所有容器服务
 docker-compose stop

资料来源

2.私有仓库管理

什么是 Harbor ?
  • Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。
  • Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
  • Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。

Harbor的特性:

  1. 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
  2. 基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
  3. 支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
  4. 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
  5. 图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
  6. 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  7. 支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
  8. Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

Harbor的构成:
Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

1)Proxy: Harbor 的 Registry、 UI、Token 服务等组件,都处在nginx反向代理后边。该代理将来自浏览器、docker clients
的请求转发到后端不同的服务上。

2)Registry:负责储存Docker 镜像,并处理Docker push/pull命令。由于要对用户进行访问控制,即不同用户对Docker 镜像
有不同的读写权限,Registry 会指向一个Token 服务,强制用户的每次Docker pull/push 请求都要携带一个合法的Token,
Registry会通过公钥对Token进行解密验证。

3)Core services:Harbor的核心功能,主要提供以下3个服务:

  • UI (harbor-ui) :提供图形化界面,帮助用户管理Registry上的镜像 (image) ,并对用户进行授权。
  • WebHook:为了及时获取Registry上image 状态变化的情况,在Registry上配置 Webhook, 把状态变化传递给 UI 模块。
  • Token 服务:负责根据用户权限给每个Docker push/pull 命令签发Token。 Docker 客户端向Registry 服务发起的请求,如果不包含Token,会被重定向到 Token 服务,获得 Token 后再重新向Registry 进行请求。

4)Database (harbor -db) :为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。

5)Job services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。

6)Log collector (harbor-log) :负责收集其他组件的日志到一个地方。

3.Docker下的服务通讯

  1. 每台机器上都有一个网卡,有的甚至有两个网卡 , ETHD 10.1.1.10/8就表示一个网卡

  2. docker启动以后, 会出现一个docker0,我们可以通过ifconfig来查看

交换机一旦创建以后, 就会创建一个叫namespace的东西,名字叫做network namespace. 全名叫做网络命名空间.也就是上图中蓝色方框VethX,不同的网络命名空间会形成相互隔离,一端固定在容器内容, 成为虚拟网卡, 另一端固定在本机。

只要多一个容器就会多一个veth。也就是说一端在容器里,另一端在本机里,作为连通的作用。 并且, 网络命名空间会将不同的网络隔离开来,各用个的。这样就实现了隔离,以及怎样与本机进行交互。这样,容器和容器之间就可以通讯了。  这解决的是容器和容器间进行通讯。 这是通过docker0网桥解决的。

二、服务编排

1.Kubernetes

kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

安装

国内安装k8s途径

  • 使用kubeadmin离线安装
  • 使用阿里公有云平台k8s
  • 通过yum官方仓库
  • 二进制包形式安装,kubeasz

安装kubeadmin加载k8s镜像

# 以下命令在三台虚拟机执行 yz10  yz20  yz21
mkdir /usr/local/k8s-install
cd /usr/local/k8s-install

k8s离线部署

10.211.55.10  yz10   Master节点
10.211.55.20  yz20   Node节点
10.211.55.21  yz21   Node节点
# 1. 调整时区
timedatectl set-timezone Asia/Shanghai
# 2. 关闭selinux和防火墙
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
# 3. k8sadmin镜像下载附带对应的docker
# 4. 镜像上传到每个节点
mkdir -p /usr/local/k8s-install
scp -r kubernetes-1.14 root@yz10:/usr/local/k8s-install

# 5. 安装docker,记得配置加速器
tar -xf docker-ce-18.09.tar.gz
cd docker 
yum localinstall -y *.rpm

# 6. 确认cgroup为 cgroupfs
docker info|grep cgroup
# 7. 安装kubeadm
tar -xf kube114-rpm.tar.gz
cd kube114-rpm
yum localinstall -y *.rpm

# 8. 关闭交换区
swapoff -a  #关闭
vi /etc/fstab
# 注释这行 永久关闭
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

# 9. 配置网桥
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

# 10. 通过镜像安装k8s
docker load -i k8s-114-images.tar.gz
docker load -i flannel-dashboard.tar.gz

2.Mesos

Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初由加州大学伯克利分校的是AMPLab开发的,后在Twitter得到广泛使用。

Mesos是一个分布式的架构,具有主从关系,master和slave。Zookeeper能做到首领选举(选mesos的master)等功能。要注意的是zookeeper也需要选举master。应用程序跑在frameworks上,它也是分布式的软件,包括scheduler和executor。图中蓝色部分是mesos本身,白色部分是需要自己开发的framework。这些需要自己开发的framework也需要考虑高可用性的问题,这算是mesos的缺点之一。Mesos使用protocol buffer和libprocess来进行通信。

1)zookeeper做为leader election。每个master起来的时候都要向zookeeper的quorum注册znode。

2)master主要用于管理slave node的状态,知道slave在哪儿,有哪些资源,同时知道各个框架的信息。比如Hadoop和MPI框架的基本信息。master还可以发resource offer。如果master down了,zookeeper可以马上从standby master里面选一个。因为几个master里面共享的东西很少,不需要数据的同步。

3)slave负责运行任务,同时不断的向master发消息,报告可用资源和在运行的任务的状态。这两种消息并不相同,报告任务状态的消息保证一定delivery,而其他消息并不保证。

4)framwork是一个分布式的应用,包括scheduler和executor。其中scheduler部分要和master紧密通信,接受master发送的offer,scheduler收到offer后决定是不是要跑某个task。executor真正的去执行任务。Offer的发送由master决定。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

4)framwork是一个分布式的应用,包括scheduler和executor。其中scheduler部分要和master紧密通信,接受master发送的offer,scheduler收到offer后决定是不是要跑某个task。executor真正的去执行任务。Offer的发送由master决定。

[外链图片转存中…(img-5QNmSJmT-1714172716503)]
[外链图片转存中…(img-rEioPfgv-1714172716503)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker+k8s的微服务实战课程 课程目录 一、初识微服务 1 微服务-导学 2 软件架构的进 3 什么是微服务 4 画出微服务架构图 5 微服务架构的优势和不足 二、微服务带来的问题及解决方案分析 1 微服务架构带来的问题 2 微服务间如何通讯 3 服务发现、部署更新和扩容 4 springboot&springcloud(上) 5 springboot&springcloud(下) 三、微服务开发 1 微服务业务分析 2 Thirft安装和验证 3 Python开发信息服务 4 开发用户服务(上) 5 开发用户服务(下) 6 开发用户EdgeService_A 7 开发用户EdgeService_B 8 开发用户EdgeService_C 9 开发用户EdgeService_D 10 dubbo入门操练(上) 11 dubbo入门操练(下) 12 开发课程服务 13 开发课程EdgeService 14 APIGatewayZuul 四、服务编排前奏 1 服务docker(上) 2 服务docker(下) 3 docker下的服务通讯(上) 4 docker下的服务通讯(下) 5 镜像仓库 6 三大平台扬帆起航 五、服务编排-Mesos 1 了解Mesos 2 画出Mesos集群架构图 3 集群环境搭建_A 4 集群环境搭建_B 5 集群环境搭建_C 6 调整微服务适应Mesos 7 微服务部署_A 8 微服务部署_B 9 微服务部署_C 六、服务编排-DockerSwarm 1 了解Swarm 2 集群环境搭建(上) 3 集群环境搭建(下) 4 调整微服务及服务配置 5 微服务部署 七、服务编排-Kubernetes 1 了解kubernetes(上) 2 了解kubernetes(下) 3 环境搭建前奏 4 预先准备环境 5 基础集群部署(上) 6 基础集群部署(下) 7 小试牛刀 8 kube-proxy和kube-dns 9 理解认证、授权 10 为集群添加认证授权(上) 11 为集群添加认证授权(下) 12 再试牛刀 13 部署我们的微服务 八、CICD和DevOps 1 了解CICD和DevOps 2 准备GitLab和Jenkins 3 CICD实践(上) 4 CICD实践(下) 九、课程总结
### 回答1: Docker是一种流行的容器技术,可以将应用程序及其依赖项打包为容器,并在不同的环境中运行。而Kubernetes(简称K8s)则是一种开源的容器编排平台,可以帮助我们管理和调度大规模的容器应用程序。 在微服务架构中,通常会将应用程序拆分为多个较小的服务,每个服务都可以独立构建、测试和部署。而使用Docker和Kubernetes可以更加方便地管理这些微服务。 首先,我们可以使用Docker将每个微服务打包为一个独立的容器镜像,包括应用程序以及其依赖项和配置文件。这样,我们就可以在不同的环境中的快速部署和复制这些容器的服务。 然后,通过使用Kubernetes,我们可以将这些容器微服务部署到集群中。Kubernetes提供了强大的容器编排功能,可以根据应用程序的需要自动调度和管理这些容器。它可以根据服务的负载情况自动进行扩缩容,并确保服务的高可用性和稳定性。 此外,Kubernetes还提供了服务发现、负载均衡、自动伸缩等高级功能,可以帮助我们更好地管理和监控微服务的运行状态。它还支持容器的滚动更新,可以实现无需停机的应用程序版本更新。 总之,使用Docker和Kubernetes进行微服务容器实践,可以极大地简应用程序的部署和管理工作,提高开发和运维效率,同时也能够提供更好的可扩展性和可靠性。这也是为什么Docker和Kubernetes在现代云原生应用开发中如此受欢迎的原因。 ### 回答2: Docker和Kubernetes是当前非常热门的技术,它们能够有效地解决微服务容器的问题,让开发者能够更加高效地管理和部署应用程序。 首先,Docker是一种轻量级的容器技术,它将应用程序和其所有的依赖打包进一个称为Docker镜像的可执行文件中。这样,开发者可以将这个镜像部署到任何支持Docker的环境中,而不用担心与其他应用程序的依赖冲突。由于Docker的镜像是轻量级的,所以可以迅速地启动和停止应用程序,方便对应用程序进行测试和部署。 接着,Kubernetes是一个开源的容器编排平台,它能够自动地在集群中部署、扩展和管理容器的应用程序。Kubernetes通过对容器进行分组和调度,可以确保应用程序的高可用性和横向扩展性。在Kubernetes中,开发者可以定义和管理应用程序的部署、服务发现、负载均衡、自动伸缩等方面的设置,而不用手动进行繁琐的配置。此外,Kubernetes还具备监控和日志收集等功能,方便开发者进行故障排查和性能优。 在微服务架构中,采用Docker和Kubernetes进行容器实践能够带来很多好处。首先,容器的应用程序能够更加灵活地部署和管理,不受底层技术栈的限制。其次,通过Kubernetes的调度和扩缩容机制,可以实现应用程序的高可用性和弹性伸缩。此外,由于Docker镜像和Kubernetes配置的可移植性,开发者可以方便地在不同的环境中进行应用程序的部署和迁移。 综上所述,Docker和Kubernetes的微服务容器实践能够极大地提高应用程序的部署效率和可维护性,是现代软件开发中不可或缺的重要技术。 ### 回答3: Docker和Kubernetes是当前非常热门的技术,用于实现微服务容器和集群管理。以下是对于Docker和Kubernetes在微服务容器实践方面的一些解释和应用。 Docker是一种开源的容器技术,可用于将应用程序及其依赖项打包成一个独立的、可执行的容器容器可以提供一种更加轻量级和可移植的方式来部署和运行应用程序。Docker的特点是快速、可移植、隔离和可拆分。 而Kubernetes是一个用于容器编排和集群管理的开源平台。它可以自动部署、扩展和操作容器的应用程序。Kubernetes通过对容器进行分组和管理,使得微服务的部署和运维更加简单和高效。 在微服务容器实践中,首先需要将应用程序及其依赖项打包成一个Docker镜像。然后,可以使用Kubernetes来创建一个包含多个容器的集群,每个容器都运行一个微服务。Kubernetes可以自动管理容器的启动和停止、容器之间的网络通信、负载均衡和容器的扩缩容等。 在CSND上可以找到许多与Docker和Kubernetes相关的教程和实践案例。这些内容可以帮助开发者了解如何使用Docker和Kubernetes来容器和部署自己的微服务应用。同时,还可以学习如何使用Kubernetes的一些高级特性,如自动伸缩、滚动升级和故障恢复等。 总结来说,Docker和Kubernetes是用于实现微服务容器和集群管理的重要工具。它们可以帮助开发者简应用程序的部署和运维工作,提升开发效率和系统的弹性。在CSND上有大量的资源可供参考,帮助开发者更好地理解和应用这些技术。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值