kubernetes 权威指南 从一个简单例子开始

转载改编自  https://blog.csdn.net/hahaxu/article/details/79772296

 

目录

一、描述

二、环境准备

1、关闭CentOS 自带防火墙服务

2、安装 etcd和Kubernetes软件(会自动安装Docker软件)

3、安装好软件后,修改两个配置文件

4、按顺序启动所有服务:

5、Docker拉取mysql镜像和tomcat镜像

三、启动MySql服务

1、首先为MySql服务创建一个RC定义文件:mysql-rc.yaml

2、发布到Kubernetes集群

四、构建Mysql Kubernetes Service定义文件

1、创建Service

2、查看创建的service

五、启动Tomcat应用

1、创建对应的RC文件myweb-rc.yaml

2、发布到Kubernetes集群

六、构建Tomcat Kubernetes Service定义文件

1、创建Service

2、查看创建的Service

七、通过浏览器访问页面


附录 k8s 常用用法

kubectl get po   显示所有的 pod, 准确的说是显示 default 命名空间下的所有pod

kubectl get no   显示所有的node

kubectl get svc

kubectl get rc

kubectl get svc

kubectl get po --all-namespaces   所有命名空间下的pod

kubectl get po -n kube-system   只显示 kube-system 命名空间下的所有pod

kubectl describe no node-name  显示node-name指定的 node 的详细情况

kubectl describe po pod-name     显示 pod-name 指定的 pod 的详细情况 

describe 可以用于各种 k8s 资源, 比如 rc  ns  svc

 

标签

kubectl get po -l gpu=true   显示标签为 gpu=true的所有po

kubectl label no 192.168.254.157 gpu=true   给node  192.168...  添加 gpu=true标签

 

 

参考 《kubernetes 权威指南》一节的 从一个简单例子开始,操作实录。

一、描述

创建一个简单的Java web程序,此 Java Web 应用 的 结构 比较 简单, 是一 个 运行 在 Tomcat 里 的 Web App, 如图 1. 1 所示, JSP页面通过 JDBC 直接访问 MySQL 数据库并展示数据。 为了演示和简化的目的,只要程序正确连接到了数据库上,它就会自动完成对应的 Table的创建与初始化数据的准备工作。所以,当我们通过浏览器访问此应用的时候,就会显示一个表格的页面,数据则来自数据库。
Java Web应用的架构组成
此应用需要启动两个容器:Web App容器和MySQL容器,并且Web App容器需要访问MySQL容器。 在Docker 时代,假设我们在一个宿主机上启动了这两个容器,则我们需要把MySQL容器的 IP 地址通过环境变量的方式注入Web App容器里;同时,需要将 WebApp 容器的8080 端口映射到宿主机的8080端口,以便能在外部访问。在本章的这个例子里,我们看看在Kubernetes 时代是如何完成这个目标的。

二、环境准备

1、关闭CentOS 自带防火墙服务

# systemctl disable firewalld
# systemctl stop firewalld

2、安装 etcd和Kubernetes软件(会自动安装Docker软件)

# yum install -y etcd kubernetes

3、安装好软件后,修改两个配置文件

Docker配置文件 /etc/sysconfig/docker,其中OPTIONS的内容设置为:

OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'

Kubernets apiserver配置文件 /etc/kubernetes/apiserver,将 –adminssion_control参数中的ServiceAccount删除

4、按顺序启动所有服务:

systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy

5、Docker拉取mysql镜像和tomcat镜像

mysql镜像

docker pull mysql:5.6

注意 这里 拉取的是 mysql:5.6   不可以是最新的版本,否则由于驱动的问题,会导致jdbc 数据库连接错误。

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database 

tomcat镜像

docker pull kubeguide/tomcat-app:v1

三、启动MySql服务

1、首先为MySql服务创建一个RC定义文件:mysql-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql
spec:
  replicas: 1
  selector:
    app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.6
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"

2、发布到Kubernetes集群

1)、创建RC

# kubectl create -f mysql-rc.yaml

2)、验证创建是否成功

kubectl get rc

rc创建没成功

kubectl get pods

pods创建没成功

* 没创建成功 * 一直处于ContainerCreating

3)、查找kubernetes pod卡在ContainerCreating状态原因并解决

主要是通过“kubectl describe pod PodName”指令查看pod发生的事件,从事件列表中可以查找到错误信息。

# kubectl describe pod mysql

错误信息

通过最后一行错误提示,下载镜像超时,访问地址被墙了

从国内镜像下载pod-infrastructure,使用阿里镜像服务,或者国内其它镜像服务
下载地址 registry.cn-hangzhou.aliyuncs.com/sunyuki/pod-infrastructure,并且重新命名。 f66f4bd9b894 是我这里下载pod-infrastructure的imageId

# docker pull registry.cn-hangzhou.aliyuncs.com/sunyuki/pod-infrastructure
# docker tag f66f4bd9b894 registry.access.redhat.com/rhel7/pod-infrastructure:latest

删除之前创建的rc,重新创建MySql Rc

# kubectl delete -f mysql-rc.yaml
# kubectl create -f mysql-rc.yaml

使用 # kubectl describe pod mysql 查看是否创建成功
这里写图片描述
通过docker ps指令查看正在运行的容器

# docker ps | grep mysql

这里写图片描述

四、构建Mysql Kubernetes Service定义文件

文件名为 mysql-scv.yaml

内容:

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
    - port: 3306
  selector:
    app: mysql

1、创建Service

# kubectl create -f mysql-scv.yaml

2、查看创建的service

# kubectl get svc
[root@localhost test]# kubectl get svc
NAME         CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
kubernetes   10.254.0.1       <none>        443/TCP    1d
mysql        10.254.138.253   <none>        3306/TCP   1m

注意到MySql服务被分配了一个值为10.254.138.253的ClusterIP地址,这是一个虚地址,随后Kubernetes集群中其他新创建的Pod就可以通过Service的ClusterIP+端口号6379来连接和访问它。根据Service的唯一名字,容器可以从环境变量中获取到Service对应的ClusterIP地址和端口,从而发起TCP/IP连接请求了。

五、启动Tomcat应用

上面我们定义和启动了MySql服务,接下来我们采用同样的步骤,完成Tomcat应用的启动过程。

1、创建对应的RC文件myweb-rc.yaml

内容:

kind: ReplicationController
metadata:
  name: myweb
spec:
# Pod的数量
  replicas: 1
# spec.selector与spec.template.metadata.labels,这两个字段必须相同,否则下一步创建RC会失败。
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
#   容器组的定义
    spec:
      containers:
#       容器名称
        - name: myweb
#         容器对应的镜像
          image: kubeguide/tomcat-app:v1
          ports:
#         在8080端口上启动容器进程,PodIP与容器端口组成Endpoint,代表着一个服务进程对外通信的地址
          - containerPort: 8080
          env:
          - name: MYSQL_SERVICE_HOST
            value: 'mysql'
          - name: MYSQL_SERVICE_PORT
            value: '3306'

2、发布到Kubernetes集群

1)、创建RC

# kubectl create -f myweb-rc.yaml

2)、验证创建是否成功

# kubectl get rc
# kubectl get pods

创建成功
这里写图片描述

六、构建Tomcat Kubernetes Service定义文件

文件名为 myweb-svc.yaml

内容:

apiVersion: v1
kind: Service
metadata: 
  name: myweb
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30001
  selector:
    app: myweb

1、创建Service

# kubectl create -f myweb-svc.yaml

2、查看创建的Service

# kubectl get svc
[root@localhost test]# kubectl get svc
NAME         CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes   10.254.0.1       <none>        443/TCP          1d
mysql        10.254.138.253   <none>        3306/TCP         34m
myweb        10.254.29.1      <nodes>       8080:30001/TCP   1m

myweb可以通过30001这个端口访问myweb(对应到8080的虚端口上)

七、通过浏览器访问页面

可以通过本机IP/127.0.0.1:30001打开tomcat页面。

然鹅,我们使用127.0.0.1:30001/demo打开页面提示jdbc数据库连接错误

[root@localhost ~]# kubectl get ep
NAME         ENDPOINTS                                                     AGE
kubernetes   192.168.80.128:6443                                           9h
mysql        172.17.0.7:3306                                               9h
myweb        172.17.0.2:8080,172.17.0.3:8080,172.17.0.4:8080 + 2 more...   9h
[root@localhost ~]# kubectl exec -ti myweb-qrjsd -- /bin/bash
root@myweb-qrjsd:/usr/local/tomcat# echo $MYSQL_SERVICE_HOST
mysql
root@myweb-qrjsd:/usr/local/tomcat# echo "172.17.0.7      mysql" >> /etc/hosts
root@myweb-qrjsd:/usr/local/tomcat# 

注意: mysql 对应的 ip 地址,大家电脑上的应该不一样,根据 kubctl get rp 返回的 mysql ip信息来配置。 其实就是人肉把域名ip给加上去 

经过上面的几个步骤,我们终于成功实现了Kubernets上第1个例子部署搭建工作,在浏览器打开,地址 http://虚拟机IP:30001/demo/
这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Kubernetes权威指南》是一本介绍Kubernetes权威性书籍,它详细解释了Kubernetes的概念、架构和核心组件,以及如何使用Kubernetes进行容器编排和管理。以下是该书的一些主要内容: 1. Kubernetes基础知识:介绍了Kubernetes的基本概念,包括Pod、Service、ReplicaSet等,并解释了它们之间的关系和作用。 2. Kubernetes架构:详细解释了Kubernetes的整体架构,包括Master节点和Worker节点的角色和功能,以及它们之间的通信机制。 3. Kubernetes核心组件:介绍了Kubernetes的核心组件,如kube-apiserver、kube-controller-manager、kube-scheduler等,以及它们在集群中的作用和交互方式。 4. 容器编排:讲解了如何使用Kubernetes进行容器编排,包括创建和管理Pod、使用Deployment进行应用部署、进行水平扩展和滚动更新等。 5. 服务发现和负载均衡:介绍了Kubernetes中的Service资源,以及如何使用Service进行服务发现和负载均衡。 6. 存储管理:讲解了Kubernetes中的存储管理机制,包括PersistentVolume和PersistentVolumeClaim的使用方法,以及不同类型的存储卷。 7. 高可用和容错:详细解释了Kubernetes的高可用机制,包括Master节点的高可用配置、节点故障处理和自动恢复等。 8. 安全和认证:介绍了Kubernetes的安全机制,包括认证、授权和准入控制等,以及如何使用RBAC进行权限管理。 9. 监控和日志:讲解了Kubernetes中的监控和日志收集机制,包括使用Metrics Server进行资源监控和使用EFK Stack进行日志收集与分析。 10. 扩展和定制:介绍了如何扩展和定制Kubernetes,包括自定义资源、自定义控制器和使用Operator进行应用管理等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值