Docker+K8S 集群环境搭建及分布式应用部署

1.安装docker

yum install docker
#启动服务
systemctl start docker.service
systemctl enable docker.service
#测试
docker version

2.安装etcd

yum install etcd -y
#启动etcd
systemctl start etcd
systemctl enable etcd
#输入如下命令查看 etcd 健康状况
etcdctl -C http://localhost:2379 cluster-health
#安装 Kubernetes
yum install kubernetes -y

安装好后,编辑文件 /etc/kubernetes/apiserver,将 KUBE_ADMISSION_CONTROL 后面的 ServiceAccount 去掉,如:

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

然后分别启动以下程序(Master):

systemctl start kube-apiserver
systemctl enable kube-apiserver
systemctl start kube-controller-manager
systemctl enable kube-controller-manager
systemctl start kube-scheduler
systemctl enable kube-scheduler

接下来启动 Node 节点的程序:

systemctl start kubelet
systemctl enable kubelet
systemctl start kube-proxy
systemctl enable kube-proxy

这样,一个简单的 K8S 集群环境就已经搭建完成了,我们可以运行以下命令来查看集群状态。

但目前该集群环境还不能很好的工作,因为需要对集群中 pod 的网络进行统一管理,所以需要创建覆盖网络 flannel。

1.安装 flannel:

yum install flannel -y

2.编辑文件 /etc/sysconfig/flanneld,增加以下代码:

--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-prefix=/atomic.io/network --etcd-endpoints=http://localhost:2379 --iface=enp0s3

其中 –iface 对应的是网卡的名字。

3.配置 etcd 中关于 flanneld 的 key

flannel 使用 etcd 进行配置,来保证多个 flannel 实例之间的配置一致性,所以需要在 etcd 上进行如下配置:

etcdctl mk /atomic.io/network/config '{ "Network": "10.0.0.0/16" }' 

/atomic.io/network/config 这个 key 与上文 /etc/sysconfig/flannel 中的配置项 FLANNEL_ETCD_PREFIX 是相对应的,错误的话启动就会出错)

Network 是配置网段,不能和物理机 IP 冲突,可以随便定义,尽量避开物理机 IP 段。

4.启动修改后的 flannel ,并依次重启 docker、kubernete:

systemctl enable flanneld
systemctl start flanneld
service docker restart
systemctl restart kube-apiserver
systemctl restart kube-controller-manager
systemctl restart kube-scheduler
systemctl enable flanneld
systemctl start flanneld
service docker restart
systemctl restart kubelet
systemctl restart kube-proxy

这样,我们将应用部署到 Docker 容器中时,就可以通过物理IP访问到容器了。

分布式应用部署

1.搭建一个基于 SpringBoot 的框架,这里不再赘述。默认已经搭建好。
2.编写Dockerfile,内容示例如下:

#下载java8的镜像
FROM java:8
#将本地文件挂到到/tmp目录
VOLUME /tmp
#复制文件到容器
ADD demo-0.0.1-SNAPSHOT.jar /demo.jar
#暴露8080端口
EXPOSE 8080
#配置启动容器后执行的命令
ENTRYPOINT ["java","-jar","/demo.jar"]

通过 docker build 命令创建镜像:

docker build -t demo .

这时,我们执行 docker images 就将看到刚才构建的镜像,如:

利用 K8S 部署 SpringBoot 应用

1.创建 rc 文件 demo-rc.yaml:

apiVersion: v1
kind: ReplicationController
metadata:
 name: demo
spec:
 # 节点数,设置为多个可以实现负载均衡效果
 replicas: 1
 selector:
  app: demo
 template:
  metadata:
   labels:
    app: demo
  spec:
   containers:
   - name: demo
    #镜像名
    image: demo
    #本地有镜像就不会去仓库拉取
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080

执行以下命令创建 pod:

kubectl create -f demo-rc.yaml 

创建成功后,我们可以查看 pod:

ContainerCreating 提示正在创建中,这时可以查看创建日志:

可以发现他提示:redhat-cat.crt 不存在,我们先通过ll命令查看下该文件:

可以发现该文件是个链接文件,它指向的是 /etc/rhsm/ca/redhat-uep.pem,而这个文件发现确实不存在,那这个文件又是怎么来的呢?答案就在这个路径里,我们需要安装 rhsm 这个软件,执行命令安装:

yum install *rhsm* -y

等待一段时间后,安装即完成。

安装完成后,执行 ll 命令查看该文件是否存在:

[root@MiWiFi-R3-srv ~]# ll /etc/rhsm/ca/redhat-uep.pem
ls: 无法访问/etc/rhsm/ca/redhat-uep.pem: 没有那个文件或目录

我们发现,依然没有该文件,不过没关心,我们可以手动创建:

touch /etc/rhsm/ca/redhat-uep.pem

执行完以上操作后,我们先将 rc 删除,再创建:

[root@MiWiFi-R3-srv ~]# kubectl delete rc demo
replicationcontroller "demo" deleted
[root@MiWiFi-R3-srv ~]# kubectl create -f demo-rc.yaml
replicationcontroller "demo" created

等待一段时间后,重新查看 po,我们发现已经成功启动:

[root@MiWiFi-R3-srv ~]# kubectl get po
NAME     READY   STATUS  RESTARTS  AGE
demo-hdmxs  1/1    Running  0     1m

这时,我们还无法通过局域网访问应用,还需要创建 Service:

1.创建 service 文件 demo-svc.yaml:

apiVersion: v1
kind: Service
metadata:
 name: demo
spec:
 type: NodePort
 ports:
 - port: 8080
  targetPort: 8080
  # 节点暴露给外部的端口(范围必须为30000-32767)
  nodePort: 30001
 selector:
  app: demo

2.执行命令:

[root@MiWiFi-R3-srv ~]# kubectl create -f demo-svc.yaml
service "demo" created

3.我们可以查看刚才创建 service:

这时,我们就可以通过 ip:30001 访问应用了,如图:

如果访问不到,需要关闭防火墙:

systemctl stop firewalld
iptables -P FORWARD ACCEPT

到此这篇关于Docker+K8S 集群环境搭建及分布式应用部署的文章就介绍到这了,更多相关Docker K8S 集群环境搭建内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Hyper-V下搭建K8S集群安装docker的方法步骤

    如果你安装了win10系统,想做k8s集群,win10自带的hyper-v也是一个很适合的虚拟机环境.在上一节中,我们安装了两台虚拟机,这一节,都安装上docker. master: 192.168.137.2 node1:  192.168.137.3 root密码:123456 1. 使用ssh登录虚拟机 有了ssh,在win10 host中就可以直接连接虚拟机了 ssh root@192.168.137.2 2.关闭安全配置 vi /etc/selinux/config 3.关闭防火墙 s

  • Docker+K8S 集群环境搭建及分布式应用部署

    1.安装docker yum install docker #启动服务 systemctl start docker.service systemctl enable docker.service #测试 docker version 2.安装etcd yum install etcd -y #启动etcd systemctl start etcd systemctl enable etcd #输入如下命令查看 etcd 健康状况 etcdctl -C http://localhost:2379

  • 使用sealos快速搭建K8s集群环境的过程

    目录 一.前言 二.sealos 三.准备环境 sealos 安装 虚拟机设置 网络 windows网络 虚拟机的网络 网卡配置 其他配置 RPM 源 四.安装开始 五.可能遇见的问题 sealos run的时候镜像下载缓慢 六.安装测试 安装Kubernetes Dashboard 一.前言 最近在做谷粒商城项目,搞到k8s了,但是跟这老师的方法一步一步做还是搭建不起来. 我不断的试错啊,各种bug都遇见了一个也没解决我真是啊哭死! 二.sealos 直到遇见一个大佬同学,告诉我sealos几

  • Docker Consul概述以及集群环境搭建步骤(图文详解)

    目录 一.Docker consul概述 二.基于 nginx 与 consul 构建自动发现即高可用的 Docker 服务架构 一.Docker consul概述 容器服务更新与发现:先发现再更新,发现的是后端节点上容器的变化(registrator),更新的是nginx配置文件(agent) registrator:是consul安插在docker容器里的眼线,用于监听监控节点上容器的变化(增加或减少,或者宕机),一旦有变化会把这些信息告诉并注册在consul server端(使用回调和协程

  • CentOS下RabbitMq高可用集群环境搭建教程

    CentOS下RabbitMq高可用集群环境搭建教程分享给大家. 准备工作 1.准备两台或多台安装有rabbitmq-server服务的服务器 我这里准备了两台,分别如下: 192.168.40.130 rabbitmq01 192.168.40.131 rabbitmq02 2.确保防火墙是关闭的3,官网参考资料 http://www.rabbitmq.com/clustering.html hosts映射 修改每台服务上的hosts文件(路径:/etc/hosts),设置成如下: 192.1

  • Zookeeper 单机环境和集群环境搭建

     一.单机环境搭建# 1.1 下载# 下载对应版本 Zookeeper,这里我下载的版本 3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz 1.2 解压# # tar -zxvf zookeeper-3.4.14.tar.gz 1.3 配置环境变量# #

  • Hadoop+HBase+ZooKeeper分布式集群环境搭建步骤

    目录 一.环境说明 2.1 安装JDK 2.2 添加Hosts映射关系 2.3 集群之间SSH无密码登陆 三.Hadoop集群安装配置 3.1 修改hadoop配置 3.2 启动hadoop集群 四.ZooKeeper集群安装配置 4.1 修改配置文件zoo.cfg 4.2 新建并编辑myid文件 4.3 启动ZooKeeper集群 五.HBase集群安装配置 5.1 hbase-env.sh 5.2 hbase-site.xml 5.3 更改 regionservers 5.4 分发并同步安装

  • 使用docker compose搭建consul集群环境的例子

    consul基本概念 server模式和client模式 server模式和client模式是consul节点的类型:client不是指的用户客户端. server模式提供数据持久化功能. client模式不提供持久化功能,并且实际上他也不工作,只是把用户客户端的请求转发到server模式的节点.所以可以把client模式的节点想象成LB(load balance),只负责请求转发. 通常server模式的节点需要配置成多个例如3个,5个.而client模式节点个数没有限制. server模式启

  • 详解使用docker 1.12 搭建多主机docker swarm集群

    swarm是docker公司自己的容器集群管理工具,本文介绍了使用docker 1.12 搭建多主机docker swarm集群,分享给大家 准备 准备至少两台的centos 7 主机(全新最小安装, 可以使用虚拟机安装) 开放端口2377 tcp端口, 7946 4789 tcp udp 端口 本文使用192.168.99.101(hostname:centos-node4) 作为swarm manager 192.168.99.102(hostname:centos-node5) 作为sw

  • Python搭建Spark分布式集群环境

    前言 Apache Spark 是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象.Spark 最大的特点就是快,可比 Hadoop MapReduce 的处理速度快 100 倍.本文没有使用一台电脑上构建多个虚拟机的方法来模拟集群,而是使用三台电脑来搭建一个小型分布式集群环境安装. 本教程采用Spark2.0以上版本(比如Spark2.0.2.Spark2.1.0等)搭建集群,同样适用于搭建Spark1.6.2集群. 安装Hadoop并搭建好Hadoop集群环境 Spark分布式集群的安装

随机推荐