002.Kubernetes简单入门实例
一 环境准备
1.1 基础环境
Kubernetes模式:单机版
系统环境:CentOS 7/172.24.9.157
部署方式:yum快速部署
其他设置:开启NTP、关闭防火墙及SELinux
二 部署过程
2.1 安装软件
1 [root@k8s ~]# yum -y install etcd kubernetes
2 [root@k8s ~]# vi /etc/sysconfig/docker
3 OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false' #修改OPTIONS值
2.2 前期准备
1 [root@k8s ~]# systemctl start firewalld
2 [root@k8s ~]# firewall-cmd --zone=public --add-port=30001/tcp --permanent
3 [root@k8s ~]# systemctl stop firewalld
4 [root@k8s ~]# systemctl disable firewalld
5 [root@k8s ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf #开启转发模式
6 [root@k8s ~]# sysctl -p
提示:必须先放通此端口,然后再次关闭防火墙。
2.3 关闭安全鉴权
1 [root@k8s ~]# vi /etc/kubernetes/apiserver
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 [root@k8s ~]# systemctl start docker etcd.service kube-apiserver kube-controller-manager.service kube-scheduler.service kubelet.service kube-proxy.service
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 [root@k8s ~]# mkdir tomcat_kbs
2 [root@k8s ~]# cd tomcat_kbs/
3 [root@k8s tomcat_kbs]# vi mysql-rc.yaml
4 apiVersion: v1
5 kind: ReplicationController #副本控制器RC
6 metadata:
7 name: mysql #RC名称,全局唯一
8 spec:
9 replicas: 1 #Pod副本期待的数量
10 selector:
11 app: mysql #符合目标的Pod拥有此标签
12 template: #根据此模板创建Pod副本(实例)
13 metadata:
14 labels:
15 app: mysql #Pod副本拥有的标签,对应RC的Selector
16 spec:
17 containers: #Pod内容的定义部分
18 - name: mysql #容器的名称
19 image: mysql:5.6 #容器对应的Docker image
20 ports:
21 - containerPort: 3306 #容器应用监听的端口号
22 env: #注入容器内的环境变量
23 - name: MYSQL_ROOT_PASSWORD
24 value: "123456"
2.6 发布MySQL RC
1 [root@k8s ~]# cd /root/tomcat_kbs/
2 [root@k8s tomcat_kbs]# kubectl create -f mysql-rc.yaml
3 [root@k8s tomcat_kbs]# kubectl get rc #查看所创建的RC
4 NAME DESIRED CURRENT READY AGE
5 mysql 1 1 1 17s
6 [root@k8s tomcat_kbs]# kubectl get pod #查看Pod情况
7 NAME READY STATUS RESTARTS AGE
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 [root@k8s tomcat_kbs]# yum -y install *rhsm* #安装rhsm,并生成pem
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 [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 [root@k8s tomcat_kbs]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest #手动pull
提示:相关删除操作如下:
1 [root@k8s tomcat_kbs]# kubectl delete -f mysql-rc.yaml
2 replicationcontroller "mysql" deleted
3 [root@k8s tomcat_kbs]# kubectl get rc
4 No resources found.
5 [root@k8s tomcat_kbs]# kubectl get pods
6 NAME READY STATUS RESTARTS AGE
7 mysql-hgkwr 0/1 Terminating 0 17m
8 [root@k8s tomcat_kbs]# kubectl delete po mysql-hgkwr
9 pod "mysql-hgkwr" deleted
10 [root@k8s tomcat_kbs]# kubectl delete pods --all --grace-period=0 --force #强制删除
2.7 创建MySQL Kubernetes Service
1 [root@k8s tomcat_kbs]# vi mysql-svc.yaml
2 apiVersion: v1
3 kind: Service
4 metadata:
5 name: mysql
6 spec:
7 ports:
8 - port: 3306
9 selector:
10 app: mysql
11 [root@k8s tomcat_kbs]# kubectl create -f mysql-svc.yaml
12 [root@k8s tomcat_kbs]# kubectl get svc
13 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
14 kubernetes 10.254.0.1 <none> 443/TCP 16m
15 mysql 10.254.132.65 <none> 3306/TCP 54s #Cluster IP
2.8 新建Tomcat RC文件
1 [root@k8s tomcat_kbs]# vi myweb-rc.yaml
2 apiVersion: v1
3 kind: ReplicationController
4 metadata:
5 name: myweb
6 spec:
7 replicas: 2
8 selector:
9 app: myweb
10 template:
11 metadata:
12 labels:
13 app: myweb
14 spec:
15 containers:
16 - name: myweb
17 image: kubeguide/tomcat-app:v1
18 ports:
19 - containerPort: 8080
2.9 发布Tomcat RC
1 [root@k8s tomcat_kbs]# kubectl create -f myweb-rc.yaml
2 [root@k8s tomcat_kbs]# kubectl get pods
3 NAME READY STATUS RESTARTS AGE
4 mysql-w1f6n 1/1 Running 0 2m
5 myweb-82s04 1/1 Running 0 28s
6 myweb-rsmbq 1/1 Running 0 28s
2.10 创建Tomcat Kubernetes Service
1 [root@k8s tomcat_kbs]# vi myweb-svc.yaml
2 apiVersion: v1
3 kind: Service
4 metadata:
5 name: myweb
6 spec:
7 type: NodePort
8 ports:
9 - port: 8080
10 nodePort: 30001
11 selector:
12 app: myweb
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 [root@k8s tomcat_kbs]# kubectl get rc
2 NAME DESIRED CURRENT READY AGE
3 mysql 1 1 1 5m
4 myweb 2 2 2 2m
5 [root@k8s tomcat_kbs]# kubectl get pod
6 NAME READY STATUS RESTARTS AGE
7 mysql-w1f6n 1/1 Running 0 4m
8 myweb-82s04 1/1 Running 0 2m
9 myweb-rsmbq 1/1 Running 0 2m
10 [root@k8s tomcat_kbs]# kubectl get services
11 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
12 kubernetes 10.254.0.1 <none> 443/TCP 19m
13 mysql 10.254.132.65 <none> 3306/TCP 3m
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 [root@k8s ~]# kubectl get ep #查看相应IP
2 NAME ENDPOINTS AGE
3 kubernetes 172.24.9.157:6443 21m
4 mysql 172.17.0.2:3306 5m
5 myweb 172.17.0.3:8080,172.17.0.4:8080 3m
6 [root@k8s ~]# docker ps -a | grep tomcat | awk '{ print $1 }' #确认容器ID
7 e5cf7adc32d0
8 2293bc1cc724
9 [root@k8s ~]# docker inspect e5cf7adc32d0 | grep hosts
10 [root@k8s ~]# echo "172.17.0.2 mysql" >> /var/lib/kubelet/pods/362cca88-8b54-11e9-8aec-525400162bb6/etc-hosts
11 [root@k8s ~]# docker inspect 2293bc1cc724 | grep hosts
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简单入门实例的更多相关文章
- vue服务端渲染简单入门实例
想到要学习vue-ssr的同学,自不必多说,一定是熟悉了vue,并且多多少少做过几个项目.然后学习vue服务端渲染无非解决首屏渲染的白屏问题以及SEO友好. 话不多说,笔者也是研究多日才搞明白这个服务 ...
- Sed简单入门实例
1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ...
- opengl简单入门实例
实现任务目标: 使用纹理贴图,增强可视效果 应用坐标变换,实现场景中不同物体重建 采用双缓冲技术,实现场景实时绘制 具有一定的鼠标.键盘交互功能 先放效果 鼠标的交互功能有:右键暂停转动,左键继续转动 ...
- 权限框架 - shiro 简单入门实例
前面的帖子简单的介绍了基本的权限控制,可以说任何一个后台管理系统都是需要权限的 今天开始咱们来讲讲Shiro 首先引入基本的jar包 <!-- shiro --> <dependen ...
- Windows10下Django虚拟环境配置和简单入门实例
环境win10家庭版64位 + python 3.5 + Django 1.8.2 1.创建virtualenv目录 开始/运行/cmd回车,进入cmd窗口,到自己指定的目录下创建virtualenv ...
- Express4+Mongodb超简单入门实例
开始前,请确保mongodb已经能正常工作,安装教程:windows下MongoDB的安装及配置 , 请自行安装配置.下面进入正文: 第一步:命令行创建数据库.表,并插入一条数据 命令如下: //创建 ...
- Spring 简单入门实例
首先新建一个Web 项目 导入相应Jar 包 <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- Oracle——存储过程简单入门实例
1.连接plsql developer,打开一个SQL Window 2.SQL Window中创建表user_info -- Create table create table USER_INFO ...
- Struts简单入门实例
转自http://www.cnblogs.com/xing901022/p/3961661.html 有改动 struts2其实就是为我们封装了servlet,简化了jsp跳转的复杂操作,并且提供了易 ...
随机推荐
- 前端深入之css篇丨2020年前,彻底掌握css动画【transition】
写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...
- 经典的Redis的主从复制搭建
##### 配置服务器 1).打开redis.conf文件修改 bind 指定的ip地址: ![image](https://img2018.cnblogs.com/blog/1334966/20 ...
- ssh隧道代理连接
0x00 什么是SSH隧道 场景: 假设有两台主机: A主机为外网,B主机为内网通常来说外网主机A是无法直接连接到内网主机B的,这时如果要实现A主机通过ssh控制B主机,通常来说有两种方法: 1.端口 ...
- [模板]二维ST表
考试yy二维ST表失败导致爆零. 其实和一维的ST表很像... 也是设$f[i][j][p][q]$为以$(i, j)$为左上角,长为$2^p$,宽为$2^q$的矩形的最大值. 算法流程是先把每一行都 ...
- java集合之Vector向量基础
Vector向量: vector类似动态数组,向量和数组类似,但是数组容量一旦确定不可更改,而向量的容量可变.向量只可以保存任何类型对象且容量不限制,数组对元素类型无限制但是容量有限. 适用场合:向量 ...
- opencv::直方图计算
直方图概念 上述直方图概念是基于图像像素值,其实对图像梯度.每个像素的角度.等一切图像的属性值,我们都可以建立直方图. 这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见 ...
- Python小工具:利用ffmpy3库3秒钟将视频转换为音频
作者 | pk 哥 来源公众号 | Python知识圈(ID:PythonCircle) 最近,有读者微信上私聊我,想让我写一篇视频批量转换成音频的文章,我答应了,周末宅家里把这个小工具做出来了. 这 ...
- ESP8266开发之旅 进阶篇⑥ ESP-specific APIs说明
1.前言 在介绍Arduino Core For ESP8266的时候,博主着重讲解了WIFI库的使用,但是并没有涉及到ESP8266硬件本身的一些特有API.所以,这一章我们将讲解ESP82 ...
- Exception evaluating SpringEL expression:
Exception evaluating SpringEL expression:错误 说明: 在帮助同事看BUG的时候遇上了这个问题,不知道是前端还是后端的错误 在网上找了很多文章解决的方法,很多都 ...
- C++ 大作业资料总结
一般 C++ 大作业都是用 Qt 来写,Qt 本身带了很多例子,详见:https://doc.qt.io/qt-5/qtexamples.html# 如果你想偷懒的话,直接拿来改就好,或者去 Gith ...