第一章 Kuberntes和Docker的学习笔记

第二章 课前准备以及项目介绍

2-1 逐层剖析Kubernates知识体系

2.1.1 当前章节介绍

image.png

2.1.2 Kubernates 核心知识体系

image.png

2.1.3 逐层解读

image.png

2-2 实战案例项目解析

image.png

2-3 Spring Boot博客应用代码整体介绍(JPA,Thmeleaf)

2.3.1 博客项目代码特色

  1. 前端
  • Thymeleaf 模板渲染引擎
  • SemanticUI 程序员也能写出专业设计师风格的页面
  1. 后端
  • SpringBoot 业界主流框架

image.png

  1. 数据层
  • JPA持久化数据库访问
  • Mysql关系型数据库

image.png

2-4 项目开发环境搭建

2.4.1 下载项目

  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)即可
image.png
内存512MB
image.png
默认
image.png
默认
image.png
默认
image.png
默认
image.png
点击创建后,点击setting -> system -> process 改成双核CPU
image.png
点击启动,并且选择自己下载的镜像
image.png
点击启动,然后选择第一个
image.png
稍等一下,我们就会看到语言选择界面,这里以中文为例,点击继续
image.png
稍等一下,我们会看到如下界面,提示必须完成带有黄色感叹号的内容,才能进行下一步,我们点击安装位置
image.png
如果不需要手动分区,直接点击完成即可。
image.png
此时黄色感叹号消失,我们现在点击网络与主机名
image.png
这里选择打开以太网,减少后期对网络的配置,点击完成
image.png
点击开始安装
image.png
点击ROOT密码
image.png
接下来需要耐心地等待安装。
image.png
点击重启

image.png
输入用户名和密码
image.png
关闭,虚拟机,然后点击文件,host network manager, 记住IPV4 Address 的IP地址,并且勾选DHCP SERVER
image.png
确定以后,点击Setting -> NetWork

Adapter1 网卡选择Host Only Adapter
image.png
Adapter2选择Nat
image.png
这样一来,既能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

  1. 添加基础软件

    yum install -y yum-utils device-mapper-persistent-data lvm2 wget
    
  2. 设置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
  1. 安装Docker

    yum install docker-ce-19.03.11 -y
    
  2. 启动并加入开机启动

    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

第三章 Kubernetes之Docker 必会

image.png

3-1 把博客应用打成一个docker image

3.1.1 进入代码目录,编写Dockerfile文件

image.png

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 用于和其他节点通信,流量转发

image.png

4-2 k8s架构

image.png

4-3 Pod k8s的基本单元

4.3.1 pod

pod可以理解为kubernates里面一个独立的小计算机。一个pod里面可以包含多个docker容器(但一般来说只跑一个),共享一套ip,网络站,端口,localhost。但是pod之间不会共享。
image.png
image.png
image.png

4-4 replicationController

负责监控pod的状态。比如数量监控,发现数量不够的话,那么就重启动一个
image.png

4.4.1 Label 用于管理和分类

本身没有什么含义,可以赋予含义。这个含义是通过配置,告诉ReplicationController,那些pod是被controller负责的。如果给pod打上的标签,没有在replicationController里面规定,那么这个pod就不会被controller控制
比如说数量监控

4.4.2 DaemonSet 常驻后台pod

可以用来监控节点的状况,虽然k8s会自动调配pod,但是如果希望手动的配置一个监控状况的pod,那么可以使用DaemonSet
image.png

4-5 Job

类似于batch。把这个每天都会执行的东西,单独拿出来。抽成一个pod,就称为job
image.png

4-6 Service

服务就像是神经系统,把各个节点链接起来。如果不配置服务,那么节点之间就是相互隔离的
image.png

4-7 Volume(卷)与数据持久化

image.png

4.7.1 为pod绑定volume进行数据持久化

volume种类

  1. 云服务商提供的volume(卷)
  2. hostPath
  3. configMap