老男孩K8S集群部署(一)

本文是我学习了老男孩k8s后做的笔记,整理成博客发表出来便于自己之后复习回顾。

使用docker的意义
老男孩K8S集群部署(一)

我们的互联网有3次重大的飞跃:
第一次飞跃:C/S架构—>B/S架构
第二次飞跃:app
第三次飞跃:小程序

使用docker引擎的缺点:

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

CNCF 云原生基金会

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

UTS
NET
IPC

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

Ingress用的最多,因为互联网公司大多是七层的服务。
由一个域名去寻找pod的过程:ingress-->service-->pod

老男孩K8S集群部署(一)

所有组件是通过apiserver来通信的,是一个通信枢纽

老男孩K8S集群部署(一)

Controller-manager需要有高可用机制

老男孩K8S集群部署(一)

Scheduler调度

老男孩K8S集群部署(一)

Kubelet 干活的组件,脏活累活都是kubelet干

老男孩K8S集群部署(一)

Kube-proxy组件:将clusterip和podip关联起来,提供集群网络
Ipvs: ipvs工具已经内嵌到linux内核里了。

老男孩K8S集群部署(一)

节点网络-->宿主机网络 10.4.7.0/24 实网络
Pod网络-->从宿主机上nat出来的 172.7.0.0/16 实网络
Service网络-->连接pod和节点网络 192.168.0.0/16 虚网络

老男孩K8S集群部署(一)

三个对应3段私有地址
Node第二位ip 4 代表机房地址
第三位ip 7 区分业务和环境 通过vlan做物理隔离

老男孩K8S集群部署(一)

上图是逻辑上的数据流向

老男孩K8S集群部署(一)

反代的同时做了高可用。
4层反代apiserver 7层反代ingress

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

准备虚拟机
我使用的是192.168.172.0/24网络

主机名 ip 功能
hdss172-21.host.com 192.168.172.21 k8s-master01 k8s代理节点1
hdss172-22.host.com 192.168.172.22 k8s-master02 k8s代理节点2
hdss172-23.host.com 192.168.172.23 k8s-worker01 k8s运算节点1
hdss172-24.host.com 192.168.172.24 k8s-worker02 k8s运算节点2
hdss172-25.host.com 192.168.172.25 docker仓库 k8s运维节点(docker仓库)

Vip 192.168.172.100

安装epel源
Yum install epel-release -y

关闭selinux和firewalld
Setenforce 0
Getenforce
systemctl stop firewalld

安装必要工具
yum install wget net-tools telnet tree nmap sysstat lrzsz dos2unix bind-utils -y

DNS服务初始化
在hdss-172-21.host.com上:
安装bind9软件,因为我们要用ingress,7层流量调度,要有域名。
yum install bind –y

配置主配置文件:
vim /etc/named.conf
listen-on port 53 { 192.168.172.21; };
allow-query { any; };
forwarders { 114.114.114.114; };
recursion yes; dns查询是使用递归的方式来查询的
dnssec-enable no;
dnssec-validation no;

检查配置:
named-checkconf
没有报错

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

配置区域配置文件

老男孩K8S集群部署(一)

vim /etc/named.rfc1912.zones
在最后添加:
zone "host.com" IN {
type master;
file "host.com.zone";
allow-update { 192.168.172.21; };
};

zone "od.com" IN {
type master;
file "od.com.zone";
allow-update { 192.168.172.21; };
};

主机域:毫无意义且好记的域 host.com
允许本机update。

业务域:od.com

编辑区域数据文件
vim /var/named/host.com.zone
$ORIGIN host.com.
$TTL 600 ; 10 minutes
@ IN SOA dns.host.com. dnsadmin.host.com. (
2021070501 ; serial
10800 ; refresh(3 hours)
900 ; retry(15 minutes)
604800 ; expire(1 week)
86400 ) ; minimum(1 day)
NS dns.host.com.
$TTL 60 ; 1 minute
dns A 192.168.172.21
hdss172-21 A 192.168.172.21
hdss172-22 A 192.168.172.22
hdss172-23 A 192.168.172.23
hdss172-24 A 192.168.172.24
hdss172-25 A 192.168.172.25

老男孩K8S集群部署(一)

配置文件中的;分号代表注释
cp /var/named/host.com.zone /var/named/od.com.zone

vim /var/named/od.com.zone
$ORIGIN od.com.
$TTL 600 ; 10 minutes
@ IN SOA dns.od.com. dnsadmin.od.com. (
2021070501 ; serial
10800 ; refresh(3 hours)
900 ; retry(15 minutes)
604800 ; expire(1 week)
86400 ) ; minimum(1 day)
NS dns.od.com.
$TTL 60 ; 1 minute
dns A 192.168.172.21

老男孩K8S集群部署(一)

再次检查配置
named-checkconf

启动named服务
systemctl start named

dns服务开启的是53端口

老男孩K8S集群部署(一)

Dig检查一下dig -t A hdss172-21.host.com @192.168.172.21 +short
老男孩K8S集群部署(一)

所以,DNS服务正常。

修改网络配置,将所有DNS1修改为hdss172-21.host.com的ip192.168.172.21,重启网络服务,ping www.baidu.com是否正常,此时的dns服务器是192.168.172.21。

再ping hdss172-21.host.com

编辑5台机器的/etc/resolv.conf
Search host.com
Nameserver 192.168.172.21

准备签发证书环境
在hdss172-25.host.com

老男孩K8S集群部署(一)
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/bin/cfssl-json
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/bin/cfssl-certinfo
chmod +x /usr/bin/cfssl*

新建存放自签证书的目录:
mkdir /opt/certs

根证书--ca证书,也就是权威证书,权威机构签发的。

创建ca证书的请求文件
/opt/certs/ca-csr.json

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

Expiry:过期时间,默认是1年。175200h就是20年
cat ca-csr.json
{
"CN": "OldboyEdu",
"hosts": [
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "beijing",
"L": "beijing",
"O": "od",
"OU": "ops"
}
],
"ca": {
"expiry": "175200h"
}
}
签证书:cfssl gencert --initca ca-csr.json | cfssl-json -bare ca

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

最重要的是ca-key.pem和ca.pem
是根证书和根证书的私钥

Docker环境安装
在hdss172-23.host.com,hdss172-24.host.com,hdss172-25.host.com三台主机上。
简单部署docker的命令:
Curl –fsSL https://get.docker.com | bash –s docker --mirror Aliyun

老男孩K8S集群部署(一)

Hdss172-23.host.com机器配置:
Cat /etc/docker/daemon.json
{
"graph": "/data/docker",
"storage-driver": "overlay2",
"insecure-registries": ["registry.access.redhat.com","quay.io","harbor.od.com"],
"registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
"bip": "192.168.23.1/24",
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true
}

Hdss172-24.host.com机器配置:
Cat /etc/docker/daemon.json
{
"graph": "/data/docker",
"storage-driver": "overlay2",
"insecure-registries": ["registry.access.redhat.com","quay.io","harbor.od.com"],
"registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
"bip": "192.168.24.1/24",
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true
}

Hdss172-25.host.com机器配置:
Cat /etc/docker/daemon.json
{
"graph": "/data/docker",
"storage-driver": "overlay2",
"insecure-registries": ["registry.access.redhat.com","quay.io","harbor.od.com"],
"registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
"bip": "192.168.25.1/24",
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true
}

3台主机上 mkdir -p /data/docker
systemctl start docker
docker info

私有仓库 harbor
在hdss172-25.host..com主机上
Harbor的github地址:https://github.com/goharbor/harbor/releases
选择1.7.6及其以上的版本,下载offline版本
tar zxf harbor-offline-installer-v1.8.3.tgz -C /opt/
mv harbor/ harbor-v1.8.3

老男孩K8S集群部署(一)
ln -s harbor-v1.8.3/ harbor
做软链接便于harbor升级

编辑harbor的配置文件harbor.yml

老男孩K8S集群部署(一)

Vim harbor.yml

hostname: harbor.od.com
http:
port: 180
log:
location: /data/harbor/logs
data_volume: /data/harbor
harbor_admin_password: Harbor12345 #生产中需要改成较为复杂的密码

mkdir -p /data/harbor/logs
yum install docker-compose –y
sh /opt/harbor/install.sh

老男孩K8S集群部署(一)

Docker-compose ps
老男孩K8S集群部署(一)

Docker ps –a

老男孩K8S集群部署(一)

用nginx反代180端口:
yum install nginx –y

老男孩K8S集群部署(一)

Nginx –t
systemctl start nginx
systemctl enable nginx

在hdss172-21.host.com中做dns的解析。
vim /var/named/od.com.zone

老男孩K8S集群部署(一)

注意序列号serial前滚一个序号

systemctl restart named
dig -t A harbor.od.com +short
老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

浏览器中访问:harbor.od.com
用户名:admin
密码:Harbor12345

老男孩K8S集群部署(一)

新建项目 public 公开

老男孩K8S集群部署(一)

下载镜像nginx:
docker pull nginx:1.7.9
==docker pull docker.io/library/nginx:1.7.9

docker images | grep 1.7.9

老男孩K8S集群部署(一)

登录
Docker login harbor.od.com
用户名:admin
密码:Harbor12345

老男孩K8S集群部署(一)

上传镜像到harbor的public库
docker push harbor.od.com/public/nginx:v1.7.9

老男孩K8S集群部署(一)

老男孩K8S集群部署(一)

上一篇:k8s harbor搭建过程


下一篇:docker harbor 1.10安装