kubernetes的五个组件
master节点的三个组件
kube-apiserver
整个集群的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制。
kube-controller-manager
控制器管理器
负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。保证资源到达期望值。
kube-scheduler
调度器
经过策略调度POD到合适的节点上面运行。分别有预选策略和优选策略。
node节点的两个组件
kubelet
在集群节点上运行的代理,kubelet会通过各种机制来确保容器处于运行状态且健康。kubelet不会管理不是由kubernetes创建的容器。kubelet接收POD的期望状态(副本数、镜像、网络等),并调用容器运行环境来实现预期状态。
kubelet会定时汇报节点的状态给apiserver,作为scheduler调度的基础。kubelet会对镜像和容器进行清理,避免不必要的文件资源占用。
kube-proxy
kube-proxy是集群中节点上运行的网络代理,是实现service资源功能组件之一。kube-proxy建立了POD网络和集群网络之间的关系。不同node上的service流量转发规则会通过kube-proxy来调用apiserver访问etcd进行规则更新。
service流量调度方式有三种方式:userspace(废弃,性能很差)、iptables(性能差,复杂,即将废弃)、ipvs(性能好,转发方式清晰)。
1.集群架构
主机名 | IP地址 |
---|---|
hdss7-11.host.com | 10.4.7.11 |
hdss7-12.host.com | 10.4.7.12 |
hdss7-21.host.com | 10.4.7.21 |
hdss7-22.host.com | 10.4.7.22 |
hdss7-200.host.com | 10.4.7.200 |
2.基础环境准备
2.1.系统设置
2.1.1.设置主机名
hostnamectl set-hostname hdss7-xx.host.com
2.1.2.关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
2.1.3.设置网卡
cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.4.7.xx
NETMASK=255.255.255.0
GATEWAY=10.4.7.254
DNS1=10.4.7.254
2.1.4.设置yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
2.1.5.安装常用工具
yum install wget net-tools telnet tree nmap sysstat lrzsz dos2unix bind-utils -y
2.2.安装bind服务
hdss7-11.host.com 上
2.2.1.安装bind 9
yum install bind -y
2.2.2.配置bind 9
vi /etc/named.conf
listen-on port 53 { 10.4.7.11; };
allow-query { any; };
forwarders { 10.4.7.254; };
recursion yes;
dnssec-enable no;
dnssec-validation no
##########
增加自定义域和对于配置
named-checkconf
vi /etc/named.rfc1912.zones
# 添加自定义主机域
zone "host.com" IN {
type master;
file "host.com.zone";
allow-update { 10.4.7.11; };
};
# 添加自定义业务域
zone "od.com" IN {
type master;
file "od.com.zone";
allow-update { 10.4.7.11; };
};
##########
为自定义域host.com创建配置文件
vi /var/named/host.com.zone
$ORIGIN host.com.
$TTL 600 ; 10 minutes
@ IN SOA dns.host.com. dnsadmin.host.com. (
2020032001 ; 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 10.4.7.11
HDSS7-11 A 10.4.7.11
HDSS7-12 A 10.4.7.12
HDSS7-21 A 10.4.7.21
HDSS7-22 A 10.4.7.22
HDSS7-200 A 10.4.7.200
##########
为自定义域od.com创建配置文件
vi /var/named/od.com.zone
$ORIGIN od.com.
$TTL 600 ; 10 minutes
@ IN SOA dns.od.com. dnsadmin.od.com. (
2020032001 ; 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 10.4.7.11
2.2.3.检查配置并启动bind 9
named-checkconf
systemctl start named
netstat -lntup|grep 53
2.2.4.检查
[root@hdss7-11 ~]# dig -t A hdss7-11.host.com @10.4.7.11 +short
10.4.7.11
[root@hdss7-11 ~]# dig -t A hdss7-12.host.com @10.4.7.11 +short
10.4.7.12
[root@hdss7-11 ~]# dig -t A hdss7-21.host.com @10.4.7.11 +short
10.4.7.21
[root@hdss7-11 ~]# dig -t A hdss7-22.host.com @10.4.7.11 +short
10.4.7.22
[root@hdss7-11 ~]# dig -t A hdss7-200.host.com @10.4.7.11 +short
10.4.7.200
2.2.5.配置DNS客户端
Linux所有主机
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=10.4.7.11
##########
vi /etc/resolv.conf
search host.com
nameserver 10.4.7.11
##########
systemctl restart network
Windows主机
wmnet8网卡更改DNS:10.4.7.11
2.2.6.检查
Linux
ping www.baidu.com
ping hdss7-200
Windows
ping hdss7-200.host.com
2.3.准备签发证书环境
hdss7-200.host.com 上
2.3.1.安装cfssl
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*
2.3.2.创建生成ca证书csr的json配置文件
mkdir /opt/certs
vi /opt/certs/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"
}
}
CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。浏览器使用该字段验证网站是否合法
C: Country, 国家
ST: State,州,省
L: Locality,地区,城市
O: Organization Name,组织名称,公司名称
OU: Organization Unit Name,组织单位名称,公司部门
2.3.3.生成ca证书文件
cd /opt/certs
cfssl gencert -initca ca-csr.json | cfssl-json -bare ca
ll
ca.csr
ca-csr.json
ca-key.pem
ca.pem
2.4.部署docker
hdss7-21.host.com,hdss7-22.host.com,hdss7-200.host.com上
2.4.1.安装
[root@hdss7-21 ~]# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2.4.2.配置
mkdir /etc/docker
vi /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": "172.7.21.1/24",
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true
}
{ "insecure-registries":["10.4.7.200:443"] }
##########
bip要根据宿主机ip变化
注意:hdss7-21.host.com bip 172.7.21.1/24
hdss7-22.host.com bip 172.7.22.1/24
hdss7-200.host.com bip 172.7.200.1/24
{ "insecure-registries":["10.4.7.11:53"] }
2.4.3.启动
mkdir -p /data/docker
systemctl start docker
systemctl enable docker
docker --version
2.5.部署docker镜像私有仓库harbor
hdss7-200.host.com 上
2.5.1.下载软件并解压
harbor官网github地址
https://github.com/goharbor/harbor/releases/download/v1.8.5/harbor-offline-installer-v1.8.5.tgz
[root@hdss7-200 src]# tar xf harbor-offline-installer-v1.8.3.tgz -C /opt/
[root@hdss7-200 opt]# mv /opt/harbor/ harbor-v1.8.3
[root@hdss7-200 opt]# ln -s /opt/harbor-v1.8.3/ /opt/harbor
2.5.2.配置
# 以下是修改项,手动在配置文件中更改
[root@hdss7-200 opt]# vi /opt/harbor/harbor.yml
hostname: harbor.od.com
http:
port: 180
harbor_admin_password:Harbor12345
data_volume: /data/harbor
log:
level: info
rotate_count: 50
rotate_size:200M
location: /data/harbor/logs
[root@hdss7-200 opt]# mkdir -p /data/harbor/logs
2.5.3.安装docker-compose
[root@hdss7-200 opt]# yum install docker-compose -y
2.5.4.安装harbor
[root@hdss7-200 harbor]# ./install.sh
2.5.5.检查harbor启动情况
[root@hdss7-200 harbor]# docker-compose ps
[root@hdss7-200 harbor]# docker ps -a
2.5.6. 在7.11配置harbor的dns内网解析
[root@hdss7-11 ~]# vi /var/named/od.com.zone
2020032002 ; serial #每次修改DNS解析后,都要滚动此ID
harbor A 10.4.7.200
[root@hdss7-11 ~]# systemctl restart named
[root@hdss7-11 ~]# dig -t A harbor.od.com +short
10.4.7.200
2.5.7.安装NGINX并配置 (使用nginx反向代理harbor)
回到7.200
运维机上操作
[root@hdss7-200 harbor]# yum install nginx -y
[root@hdss7-200 harbor]# vi /etc/nginx/conf.d/harbor.od.com.conf
server {
listen 80;
server_name harbor.od.com;
client_max_body_size 1000m;
location / {
proxy_pass http://127.0.0.1:180;
}
}
[root@hdss7-200 harbor]# nginx -t
[root@hdss7-200 harbor]# systemctl start nginx
[root@hdss7-200 harbor]# systemctl enable nginx
2.5.8.浏览器打开harbor.od.com并测试
[root@hdss7-11 ~]# curl harbor.od.com
1、浏览器输入:harbor.od.com 用户名:admin 密码:Harbor12345
2、新建项目:public 访问级别:公开
3、下载镜像并给镜像打tag
[root@hdss7-200 harbor]# docker pull nginx:1.7.9
[root@hdss7-200 harbor]# docker images |grep 1.7.9
[root@hdss7-200 harbor]# docker tag 84581e99d807 harbor.od.com/public/nginx:v1.7.9
4、登录harbor并上传到仓库
[root@hdss7-200 harbor]# docker login harbor.od.com
[root@hdss7-200 harbor]# docker push harbor.od.com/public/nginx:v1.7.9
pauser镜像是k8s启动pod时,预先用来创建相关资源(如名称空间)的
nginx镜像是k8s部署好以后,我们测试pod创建所用的
docker login harbor.od.com -uadmin -pHarbor12345
docker pull kubernetes/pause
docker pull nginx:1.7.9
docker tag kubernetes/pause:latest harbor.od.com/public/pause:latest
docker tag nginx:1.17.9 harbor.od.com/public/nginx:v1.17.9
docker push harbor.od.com/public/pause:latest
docker push harbor.od.com/public/nginx:v1.17.9
注意:无法登陆harbor
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VvkzQpN0-1659773331249)(C:\Users\Sulemon\AppData\Roaming\Typora\typora-user-images\1611306849866.png)]
在 200 的/etc/hosts 添加harbor.od.com的地址
- 4.7.200 harbor.odcom
2.5.9.检查**
可以看到NGINX镜像已经上传到public下
2.6 准备nginx文件服务
创建一个nginx虚拟主机,用来提供文件访问访问,主要依赖nginx的autoindex
属性