第一章 Kuberntes和Docker的学习笔记
第二章 课前准备以及项目介绍
2-1 逐层剖析Kubernates知识体系
2.1.1 当前章节介绍
2.1.2 Kubernates 核心知识体系
2.1.3 逐层解读
2-2 实战案例项目解析
2-3 Spring Boot博客应用代码整体介绍(JPA,Thmeleaf)
2.3.1 博客项目代码特色
- 前端
- Thymeleaf 模板渲染引擎
- SemanticUI 程序员也能写出专业设计师风格的页面
- 后端
- SpringBoot 业界主流框架
- 数据层
- JPA持久化数据库访问
- Mysql关系型数据库
2-4 项目开发环境搭建
2.4.1 下载项目
git clone git@github.com:YoungDriverOfTech/kubernetes-blog.git
2.4.2 下载maven和mysql
自定百度
2-5 生产环境搭建,VirtualBox虚拟机配置双网卡实现固定IP
2.5.1 安装VirtualBox,下载CentOS镜像
Version选择 Other Linux(64-bit)即可
内存512MB
默认
默认
默认
默认
点击创建后,点击setting -> system -> process 改成双核CPU
点击启动,并且选择自己下载的镜像
点击启动,然后选择第一个
稍等一下,我们就会看到语言选择界面,这里以中文为例,点击继续
稍等一下,我们会看到如下界面,提示必须完成带有黄色感叹号的内容,才能进行下一步,我们点击安装位置。
如果不需要手动分区,直接点击完成即可。
此时黄色感叹号消失,我们现在点击网络与主机名。
这里选择打开以太网,减少后期对网络的配置,点击完成。
点击开始安装。
点击ROOT密码。
接下来需要耐心地等待安装。
点击重启
输入用户名和密码
关闭,虚拟机,然后点击文件,host network manager, 记住IPV4 Address 的IP地址,并且勾选DHCP SERVER
确定以后,点击Setting -> NetWork
Adapter1 网卡选择Host Only Adapter
Adapter2选择Nat
这样一来,既能ping同外网,也能和宿主机进行通讯。
设置静态IP,这个IP就是刚才需要记住的IP
其中,ONBOOT=Yes 表示开机启动,BOOTPROTO=static为静态 IP 生效,IP 地址为192.168.99.101。修改完如下所示:
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.99.101
重启网络
systemctl restart network
免密登录,把宿主机公钥copy到虚拟机
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.99.101
// 登录的话
ssh root@192.168.99.101
配置 Master 和 work 节点的域名
vim /etc/hosts
192.168.99.101 master
192.168.99.102 node1
192.168.99.103 node2
2-6 安装Docker以及环境配置
2.6.1 再CentOS上安装Docker
添加基础软件
yum install -y yum-utils device-mapper-persistent-data lvm2 wget
设置Docker 的yum源 ```bash yum-config-manager —add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
3. 查看仓库中所有DOcker版本
```bash
yum list docker-ce --showduplicates | sort -r
安装Docker
yum install docker-ce-19.03.11 -y
启动并加入开机启动
systemctl start docker systemctl enable docker
2.7 Docker安装Mysql Server
2.7.1 创建Docker持久化配置和数据目录
```bash mkdir /opt/mysql mkdir /opt/mysql/conf.d mkdir /opt/mysql/data/
修改权限
chmod 777 -R /opt/mysql/
创建my.cnf配置文件
vi /opt/mysql/my.cnf
my.cnf添加如下内容:
[mysqld] user=mysql character-set-server=utf8 default_authentication_plugin=mysql_native_password secure_file_priv=/var/lib/mysql expire_logs_days=7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=1000
[client] default-character-set=utf8
[mysql] default-character-set=utf8
<a name="yd0hn"></a>
### 2.7.2 运行Mysql Docker镜像
```bash
docker run \
--name mysql57 \
-p 3306:3306 \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/log:/var/log/mysql \
-v /opt/mysql/my.cnf:/etc/mysql/my.cnf:rw \
-e MYSQL_ROOT_PASSWORD=password \
-d mysql:5.7 --default-authentication-plugin=mysql_native_password
2.7.3 安装Mysql客户端
yum install -y mysql
# 登录mysql
mysql -uroot -h127.0.0.1 -p
# 创建项目所需要的数据库以及表
CREATE DATABASE `blogDB` CHARACTER SET utf8 COLLATE utf8_general_ci;
2-8 博客应用编译,打包,运行
2.8.1 安装各种软件
sudo yum install java-1.8.0-openjdk
java -version
sudo yum install maven
mvn ––version
sudo yum install git
git --version
2.8.2 拉取代码,编译打包
git pull git@github.com:YoungDriverOfTech/kubernetes-blog.git
cd Final
mvn package
java -jar target/kubeblog.jar
2.8.3 关闭防火墙/访问项目
如果出现无法访问博客的错误,可以关闭虚拟机的防火墙:
查看防火墙:systemctl status firewalld.service
关闭防火墙:systemctl stop firewalld.service
- 访问博客用户端:http://localhost:5000
- 访问博客管理员端:http://localhost:5000/admin, 用户名密码 admin/password
第三章 Kubernetes之Docker 必会
3-1 把博客应用打成一个docker image
3.1.1 进入代码目录,编写Dockerfile文件
FROM openjdk:8-jdk-alpine
MAINTAINER QingFeng
VOLUME /tmp
ADD target/kubeblog.jar /kubeblog.jar
EXPOSE 5000
ENTRYPOINT ["java","-jar","/kubeblog.jar"]
3.1.2 docker built 打包
docker build -t kubeblog .
# 打包完成后使用docker images查看
3.1.3 上传到Dockerhub
docker login
# docker tag 本地image tag名字
docker tag kubeblog 670904260/kubeblog
# docker push tag名字
docker push 670904260/kubeblog
3-2 运行博客应用
docker run --name kubeblog -d -p 5000:5000 --link mysql57 -e MYSQL_SERVER="mysql57" kubeblog:latest
第四章 K8s组件
4-1 组件
4.1.1 Master节点
- etcd 集中管理整个节点集群状态
- api server 负责接收外界的请求,然后告诉发送者,该干啥。就是kubernates节点的增删改查接口
scheduler 负责节点的调度,比如一个机器挂掉了,那么把应用调度的别的机器上
4.1.2 Worker节点
kubelet 小kubernates节点,用于管理节点上运行着的容器
- kube-proxy 用于和其他节点通信,流量转发
4-2 k8s架构
4-3 Pod k8s的基本单元
4.3.1 pod
pod可以理解为kubernates里面一个独立的小计算机。一个pod里面可以包含多个docker容器(但一般来说只跑一个),共享一套ip,网络站,端口,localhost。但是pod之间不会共享。
4-4 replicationController
负责监控pod的状态。比如数量监控,发现数量不够的话,那么就重启动一个
4.4.1 Label 用于管理和分类
本身没有什么含义,可以赋予含义。这个含义是通过配置,告诉ReplicationController,那些pod是被controller负责的。如果给pod打上的标签,没有在replicationController里面规定,那么这个pod就不会被controller控制
比如说数量监控
4.4.2 DaemonSet 常驻后台pod
可以用来监控节点的状况,虽然k8s会自动调配pod,但是如果希望手动的配置一个监控状况的pod,那么可以使用DaemonSet
4-5 Job
类似于batch。把这个每天都会执行的东西,单独拿出来。抽成一个pod,就称为job
4-6 Service
服务就像是神经系统,把各个节点链接起来。如果不配置服务,那么节点之间就是相互隔离的
4-7 Volume(卷)与数据持久化
4.7.1 为pod绑定volume进行数据持久化
volume种类
- 云服务商提供的volume(卷)
- hostPath
- configMap