一 环境准备

1.1 基础环境

Kubernetes模式:单机版

系统环境:CentOS 7/172.24.9.157

部署方式:yum快速部署

其他设置:开启NTP、关闭防火墙及SELinux

二 部署过程

2.1 安装软件

  1. 1 [root@k8s ~]# yum -y install etcd kubernetes
  2. 2 [root@k8s ~]# vi /etc/sysconfig/docker
  3. 3 OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false' #修改OPTIONS值

2.2 前期准备

  1. 1 [root@k8s ~]# systemctl start firewalld
  2. 2 [root@k8s ~]# firewall-cmd --zone=public --add-port=30001/tcp --permanent
  3. 3 [root@k8s ~]# systemctl stop firewalld
  4. 4 [root@k8s ~]# systemctl disable firewalld
  5. 5 [root@k8s ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf #开启转发模式
  6. 6 [root@k8s ~]# sysctl -p

提示:必须先放通此端口,然后再次关闭防火墙。

2.3 关闭安全鉴权

  1. 1 [root@k8s ~]# vi /etc/kubernetes/apiserver
  2. 2 KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota" #删除SecurityContextDeny,ServiceAccount

提示:若不关闭鉴权,可能出现以下报错:Error creating: No API token found for service account "default"……

2.4 启动服务

  1. 1 [root@k8s ~]# systemctl start docker etcd.service kube-apiserver kube-controller-manager.service kube-scheduler.service kubelet.service kube-proxy.service
  2. 2 [root@k8s ~]# systemctl enable docker etcd.service kube-apiserver kube-controller-manager.service kube-scheduler.service kubelet.service kube-proxy.service

2.5 新建MySQL RC文件

  1. 1 [root@k8s ~]# mkdir tomcat_kbs
  2. 2 [root@k8s ~]# cd tomcat_kbs/
  3. 3 [root@k8s tomcat_kbs]# vi mysql-rc.yaml
  4. 4 apiVersion: v1
  5. 5 kind: ReplicationController #副本控制器RC
  6. 6 metadata:
  7. 7 name: mysql #RC名称,全局唯一
  8. 8 spec:
  9. 9 replicas: 1 #Pod副本期待的数量
  10. 10 selector:
  11. 11 app: mysql #符合目标的Pod拥有此标签
  12. 12 template: #根据此模板创建Pod副本(实例)
  13. 13 metadata:
  14. 14 labels:
  15. 15 app: mysql #Pod副本拥有的标签,对应RC的Selector
  16. 16 spec:
  17. 17 containers: #Pod内容的定义部分
  18. 18 - name: mysql #容器的名称
  19. 19 image: mysql:5.6 #容器对应的Docker image
  20. 20 ports:
  21. 21 - containerPort: 3306 #容器应用监听的端口号
  22. 22 env: #注入容器内的环境变量
  23. 23 - name: MYSQL_ROOT_PASSWORD
  24. 24 value: "123456"

2.6 发布MySQL RC

  1. 1 [root@k8s ~]# cd /root/tomcat_kbs/
  2. 2 [root@k8s tomcat_kbs]# kubectl create -f mysql-rc.yaml
  3. 3 [root@k8s tomcat_kbs]# kubectl get rc #查看所创建的RC
  4. 4 NAME DESIRED CURRENT READY AGE
  5. 5 mysql 1 1 1 17s
  6. 6 [root@k8s tomcat_kbs]# kubectl get pod #查看Pod情况
  7. 7 NAME READY STATUS RESTARTS AGE
  8. 8 mysql-w1f6n 1/1 Running 0 10s

提示:通常可能遇到以下错误——

错误:/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory。

解决:

  1. 1 [root@k8s tomcat_kbs]# yum -y install *rhsm* #安装rhsm,并生成pem
  2. 2 [root@k8s tomcat_kbs]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
  3. 3 [root@k8s tomcat_kbs]# rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
  4. 4 [root@k8s tomcat_kbs]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest #手动pull

提示:相关删除操作如下:

  1. 1 [root@k8s tomcat_kbs]# kubectl delete -f mysql-rc.yaml
  2. 2 replicationcontroller "mysql" deleted
  3. 3 [root@k8s tomcat_kbs]# kubectl get rc
  4. 4 No resources found.
  5. 5 [root@k8s tomcat_kbs]# kubectl get pods
  6. 6 NAME READY STATUS RESTARTS AGE
  7. 7 mysql-hgkwr 0/1 Terminating 0 17m
  8. 8 [root@k8s tomcat_kbs]# kubectl delete po mysql-hgkwr
  9. 9 pod "mysql-hgkwr" deleted
  10. 10 [root@k8s tomcat_kbs]# kubectl delete pods --all --grace-period=0 --force #强制删除


2.7 创建MySQL Kubernetes Service

  1. 1 [root@k8s tomcat_kbs]# vi mysql-svc.yaml
  2. 2 apiVersion: v1
  3. 3 kind: Service
  4. 4 metadata:
  5. 5 name: mysql
  6. 6 spec:
  7. 7 ports:
  8. 8 - port: 3306
  9. 9 selector:
  10. 10 app: mysql
  11. 11 [root@k8s tomcat_kbs]# kubectl create -f mysql-svc.yaml
  12. 12 [root@k8s tomcat_kbs]# kubectl get svc
  13. 13 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  14. 14 kubernetes 10.254.0.1 <none> 443/TCP 16m
  15. 15 mysql 10.254.132.65 <none> 3306/TCP 54s #Cluster IP

2.8 新建Tomcat RC文件

  1. 1 [root@k8s tomcat_kbs]# vi myweb-rc.yaml
  2. 2 apiVersion: v1
  3. 3 kind: ReplicationController
  4. 4 metadata:
  5. 5 name: myweb
  6. 6 spec:
  7. 7 replicas: 2
  8. 8 selector:
  9. 9 app: myweb
  10. 10 template:
  11. 11 metadata:
  12. 12 labels:
  13. 13 app: myweb
  14. 14 spec:
  15. 15 containers:
  16. 16 - name: myweb
  17. 17 image: kubeguide/tomcat-app:v1
  18. 18 ports:
  19. 19 - containerPort: 8080

2.9 发布Tomcat RC

  1. 1 [root@k8s tomcat_kbs]# kubectl create -f myweb-rc.yaml
  2. 2 [root@k8s tomcat_kbs]# kubectl get pods
  3. 3 NAME READY STATUS RESTARTS AGE
  4. 4 mysql-w1f6n 1/1 Running 0 2m
  5. 5 myweb-82s04 1/1 Running 0 28s
  6. 6 myweb-rsmbq 1/1 Running 0 28s

2.10 创建Tomcat Kubernetes Service

  1. 1 [root@k8s tomcat_kbs]# vi myweb-svc.yaml
  2. 2 apiVersion: v1
  3. 3 kind: Service
  4. 4 metadata:
  5. 5 name: myweb
  6. 6 spec:
  7. 7 type: NodePort
  8. 8 ports:
  9. 9 - port: 8080
  10. 10 nodePort: 30001
  11. 11 selector:
  12. 12 app: myweb
  13. 13 [root@k8s tomcat_kbs]# kubectl create -f myweb-svc.yaml

提示:type=NodePort和nodePort=30001的两个属性,表明此service开启了NodePort方式外网访问模式。

Service的虚拟IP是由Kubernetes虚拟出来的内部网络,外部是无法寻址到的。但是有些服务又需要被外部访问到,例如web前段。这时候就需要加一层网络转发,即外网到内网的转发。Kubernetes提供了NodePort、LoadBalancer、Ingress三种方式。

nodePort,在之前的Guestbook示例中,已经演示了NodePort的用法。NodePort的原理是,Kubernetes会在每一个Node上暴露出一个端口:nodePort,外部网络可以通过(任一Node)[NodeIP]:[NodePort]访问到后端的Service。

三 测试验证

3.1 验证Kubernetes相关信息

  1. 1 [root@k8s tomcat_kbs]# kubectl get rc
  2. 2 NAME DESIRED CURRENT READY AGE
  3. 3 mysql 1 1 1 5m
  4. 4 myweb 2 2 2 2m
  5. 5 [root@k8s tomcat_kbs]# kubectl get pod
  6. 6 NAME READY STATUS RESTARTS AGE
  7. 7 mysql-w1f6n 1/1 Running 0 4m
  8. 8 myweb-82s04 1/1 Running 0 2m
  9. 9 myweb-rsmbq 1/1 Running 0 2m
  10. 10 [root@k8s tomcat_kbs]# kubectl get services
  11. 11 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  12. 12 kubernetes 10.254.0.1 <none> 443/TCP 19m
  13. 13 mysql 10.254.132.65 <none> 3306/TCP 3m
  14. 14 myweb 10.254.7.163 <nodes> 8080:30001/TCP 1m

提示:typeNodePort和nodePort=30001,表明此Service开启了NodePort方式的外网访问模式。

3.2 浏览器测试

http://172.24.9.157:30001/demo

错误:若出现以下JDBC报错可通过以下操作解决:

解决:

  1. 1 [root@k8s ~]# kubectl get ep #查看相应IP
  2. 2 NAME ENDPOINTS AGE
  3. 3 kubernetes 172.24.9.157:6443 21m
  4. 4 mysql 172.17.0.2:3306 5m
  5. 5 myweb 172.17.0.3:8080,172.17.0.4:8080 3m
  6. 6 [root@k8s ~]# docker ps -a | grep tomcat | awk '{ print $1 }' #确认容器ID
  7. 7 e5cf7adc32d0
  8. 8 2293bc1cc724
  9. 9 [root@k8s ~]# docker inspect e5cf7adc32d0 | grep hosts
  10. 10 [root@k8s ~]# echo "172.17.0.2 mysql" >> /var/lib/kubelet/pods/362cca88-8b54-11e9-8aec-525400162bb6/etc-hosts
  11. 11 [root@k8s ~]# docker inspect 2293bc1cc724 | grep hosts
  12. 12 [root@k8s ~]# echo "172.17.0.2 mysql" >> /var/lib/kubelet/pods/362ce14d-8b54-11e9-8aec-525400162bb6/etc-hosts

提示:如上报错原因为旧版本jdbc驱动可用,但是现在yaml文件中没有版本号,默认依然是latest,新版jdbc驱动不能连接latest版本的mysql,故需要更改yaml文件,添加版本(建议使用5.6)。

参考文档:https://blog.csdn.net/lz0635/article/details/83303300

002.Kubernetes简单入门实例的更多相关文章

  1. vue服务端渲染简单入门实例

    想到要学习vue-ssr的同学,自不必多说,一定是熟悉了vue,并且多多少少做过几个项目.然后学习vue服务端渲染无非解决首屏渲染的白屏问题以及SEO友好. 话不多说,笔者也是研究多日才搞明白这个服务 ...

  2. Sed简单入门实例

    1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ...

  3. opengl简单入门实例

    实现任务目标: 使用纹理贴图,增强可视效果 应用坐标变换,实现场景中不同物体重建 采用双缓冲技术,实现场景实时绘制 具有一定的鼠标.键盘交互功能 先放效果 鼠标的交互功能有:右键暂停转动,左键继续转动 ...

  4. 权限框架 - shiro 简单入门实例

    前面的帖子简单的介绍了基本的权限控制,可以说任何一个后台管理系统都是需要权限的 今天开始咱们来讲讲Shiro 首先引入基本的jar包 <!-- shiro --> <dependen ...

  5. Windows10下Django虚拟环境配置和简单入门实例

    环境win10家庭版64位 + python 3.5 + Django 1.8.2 1.创建virtualenv目录 开始/运行/cmd回车,进入cmd窗口,到自己指定的目录下创建virtualenv ...

  6. Express4+Mongodb超简单入门实例

    开始前,请确保mongodb已经能正常工作,安装教程:windows下MongoDB的安装及配置 , 请自行安装配置.下面进入正文: 第一步:命令行创建数据库.表,并插入一条数据 命令如下: //创建 ...

  7. Spring 简单入门实例

    首先新建一个Web 项目 导入相应Jar 包 <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  8. Oracle——存储过程简单入门实例

    1.连接plsql developer,打开一个SQL Window 2.SQL Window中创建表user_info -- Create table create table USER_INFO ...

  9. Struts简单入门实例

    转自http://www.cnblogs.com/xing901022/p/3961661.html 有改动 struts2其实就是为我们封装了servlet,简化了jsp跳转的复杂操作,并且提供了易 ...

随机推荐

  1. 微信开发中使用微信JSSDK和使用URL.createObjectURL上传预览图片的不同处理对比

    在做微信公众号或者企业微信开发业务应用的时候,我们常常会涉及到图片预览.上传等的处理,往往业务需求不止一张图片,因此相对来说,需要考虑的全面一些,用户还需要对图片进行预览和相应的处理,在开始的时候我使 ...

  2. 算法学习之剑指offer(十一)

    一 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. import java.util.*; ...

  3. SystemVerilog Assertion 设计、调试、测试总结(2)

    上一篇博客主要写了SVA的基本语法(详细),这一篇主要写SVA语法总结,以及如何查看SVA波形等. 断言assertion被放在verilog设计中,方便在仿真时查看异常情况.当异常出现时,断言会报警 ...

  4. C#版ASP.NET Web API使用示例

    为更好更快速的上手Webapi设计模式的接口开发,本文详细解释了在Web API接口的开发过程中,我们可能会碰到各种各样的问题总结了这篇,希望对大家有所帮助. 1:在接口定义中确定MVC的get或者P ...

  5. Beetlex服务框架之Webapi访问限制和url重写

    在新版本的BeetleX.FastHttpApi中集成了IP访问策略和URL重写两个功能,通过IP访问策略可以制定服务针对不同IP的访问限制控制:而URL重写则可以制定更好的URL访问方式.以下介绍这 ...

  6. ndnsim结果分析

    ndnSIM中提供了几种trace用来对仿真结果进行跟踪,生成数据文件txt 官网地址: https://ndnsim.net/current/metric.html#packet-trace-hel ...

  7. dos命令创建批处理脚本

    win+r  打开cmd 输入 copy con  1.bat 回车 进入编辑状态输入 @echo off echo xxxx Ctrl+z 结束编辑   会在当前目录生成一个bat文件

  8. 基础安全术语科普(五)——crypter

    crypter(加壳):使病毒逃过反病毒软件检测的技术 UD类加壳病毒:只有%50至%25的软件能检测出是病毒. FUD类加壳病毒:完全不会被检测出来. 加壳技术有两个主要组件: 1.client — ...

  9. kmp算法,求重复字符串

    public class Demo { public static void main(String[] args) { String s1 = "ADBCFHABESCACDABCDABC ...

  10. Linux常用命令(1)

      常用命令(1)   1.系统相关命令 su 切换用户 hostname 查看主机名 who 查看登录到系统的用户 whoami 确认自己身份 history 查看运行命令的历史 ifconfig ...