一、实验
1、实验架构图
2、实验架构图
3、安装方式
Minkube 单节点微型k8s(仅供学习、预览使用)
二进制安装部署(生产首选,新手推荐)
使用kubeadmin进行部署,k8s的部署工具,跑在k8s里(相对简单,熟手推荐)
4、本实验使用的三条网络规划
二、部署k8s(所有主机上)
1、准备工作(所有主机上)
1)关闭防火墙
systemctl stop firewalld
备注:必须关闭
2)关闭selinux
setenforce 0 临时关闭 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 永久关闭
3)关闭swap
swapoff -a && sysctl -w vm.swappiness=0 临时关闭
free -h 可以通过这个命令查看swap是否关闭了
4)在各节点中关闭自动挂载swap交换分区
[root@ k8s-masters01 ~]#vim /etc/fstab 把swap注释掉: 永久关闭
#UUID=a11cdd2a-eeed-4ed7-af6b-779094652766 swap swap defaults 0 0
2、安装源(所有主机上)
yum install epel-release -y yum install wget net-tools telnet tree nmap sysstat lrzsz dos2unix bind-utils -y
3、安装bind9软件(dns服务器20)
yum install -y bind
4、修改配置文件(dns服务器20)
vim /etc/named.conf listen-on port 53 { 192.168.112.20; }; #将127.0.0.1修改为当前主机IP //listen-on-v6 port 53 { ::1; }; allow-query { any; }; #为哪些服务器提供解析服务 forwarders { 192.168.112.1; }; #用来指定上一层DNS地址,一般指定网关,确保服务能够访问公网 recursion yes; dnssec-enable no; # 是否支持DNSSEC开关 PS:dnssec作用:1.为DNS数据提供来源验证 2.为数据提供完整性性验证 3.为查询提供否定存在验证 dnssec-validation no; #是否进行DNSSEC确认开关
5、检查配置文件(dns服务器20)
named-checkconf
6、修改区域配置文件(dns服务器20)
vim /etc/named.rfc1912.zones zone "host.com" IN { type master; file "host.com.zone"; allow-update { 192.168.112.20; }; }; zone "od.com" IN { type master; file "od.com.zone"; allow-update { 192.168.112.20; }; };
7、配置区域数据文件(dns服务器20)
vim /var/named/host.com.zone $ORIGIN host.com. $TTL 600 ; 10 minutes @ IN SOA dns.host.com. dnsadmin.host.com. ( 2021020701 ; serial 10800 ; refresh (3 hours) 900 ; retry (15 minutes) 604800 ; expire (1 week) 86400 ; minimum (1 day) ) NS dns.host.com. $TTL 60 ; minute dns A 192.168.112.20 k8s-nginx-proxy1 A 192.168.112.20 k8s-nginx-proxy2 A 192.168.112.21 kubectl1 A 192.168.112.22 kubectl2 A 192.168.112.23 operations A 192.168.112.24 vim /var/named/od.com.zone $ORIGIN od.com. $TTL 600 ; 10 minutes @ IN SOA dnsod.com. dnsadmin.od.com. ( 2021020701 ; serial 10800 ; refresh (3 hours) 900 ; retry (15 minutes) 604800 ; expire (1 week) 86400 ; minimum (1 day) ) NS dns.host.com. $TTL 60 ; minute dns A 192.168.112.20 harbor A 192.168.112.24
8、启动服务(dns服务器20)
systemctl start named systemctl enable named dig -t A k8s-nginx-proxy1.host.com @192.168.112.20 +short
9、客户端配置(所有主机)
修改网卡dns为dns服务器
vim /etc/resolv.conf search host.com nameserver 10.4.7.11
10、修改网卡配置:PS:如果网卡指定了DNS1配置(所有主机)
vim /etc/sysconfig/network-scripts/ifcfg-ens192 DNS1=192.168.112.20
三、签发证书(在运维主机上操作)
1、、在运维节点中安装证书生成工具cfssl:
cd /usr/bin 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、查看验证
which cfssl which cfssl-json which cfssl-certinfo
3、创建自签证书目录
mkdir /opt/certs cd /opt/certs
4、创建根证书
vi /opt/certs/ca-csr.json { "CN": "OldboyEdu", "hosts":[ ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Beijing", "ST": "Beijing" } ], "ca":{ "expiry": "175200h" } }
CN:Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。浏览器使用该字段验证网站是否合法
C:Country,国家
ST:State ,州,省
L:Locality,地区,城市
O:Organization Name:组织名称,公司名称
OU:Organization Unit Name 组织单位名称,公司部门
expiry:过期时间,如果使用kubeadmin安装,默认证书有效期是1年,我们这里手动部署为20年,这里如果证书失效,会导致整个k8s集群瘫痪。
生成证书:
cfssl gencert -initca ca-csr.json | cfssl-json -bare ca 做成承载式证书
四、部署docker环境
1、安装docker(在22、23、24上操作)
方法一: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 方法二: 1)安装必要的系统工具 yum install –y yum-utils device-mapper-persistent-data lvm2 2)添加docker的yum yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3)更新yum缓存 yum makecache fas yum makecache fast 4)安装docker-ce yum -y install docker-ce
2、设置docker国内镜像加速
sudo mkdir -p /etc/docker /data/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "graph": "/data/docker", "storage-driver": "overlay2", "insecure-registries": ["registry.access.redhat.com","quay.io","harbor.od.com"], "registry-mirrors": ["https://blcknu57.mirror.aliyuncs.com"], "bip": "172.7.22.1/24", "exec-opts": ["native.cgroupdriver=systemd"], "live-restore": true } EOF
bip:和你规划的IP地址有关,每台需自行修改
3、启动docker并设置成后台启动
systemctl restart docker && systemctl enable docker
4、安装本地仓库(docker私有仓库服务器上)
harbor私有仓库下载地址:https://github.com/goharbor/harbor/releases/tag/ wget https://github.com/goharbor/harbor/releases/download/v1.9.2/harbor-offline-installer-v1.9.2.tgz tar -zxf harbor-offline-installer-v1.9.2.tgz -C /opt/ cd /opt/ mv harbor harbor-1.9.2 ln -s /opt/harbor-1.9.2 /opt/harbor #方便版本管理 编辑harbor配置文件: vim /opt/harbor/harbor.yml hostname: harbor.od.com #这里添加的是我们开始在hdss7-11的自建dns上添加的域名解析 port: 180 #避免和nginx端口冲突 data_volume: /data/harbor location: /data/harbor/logs 创建数据目录和日志目录 mkdir -p /data/harbor/logs
5、接下来安装docker-compose
Docker Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。
yum install docker-compose -y #根据网络情况不同,可能需要一些时间 执行harbor脚本: sh /opt/harbor/install.sh #根据网络情况不同,可能需要一些时间 cd /opt/harbor docker-compose ps
6、安装nginx
yum install nginx -y #可是直接yum,也可以安装源码安装 编辑nginx配置文件: vi /etc/nginx/conf.d/harbor.od.com.conf 反代harbor: server { listen 80; server_name harbor.od.com; client_max_body_size 1000m; location / { proxy_pass http://127.0.0.1:180; } } 启动nginx并设置开机启动: systemctl start nginx systemctl enable nginx 试着访问harbor,使用宿主机浏览器打开harbor.od.com,如果访问不了,检查dns是否是10.4.7.11,也就是部署bind服务的服务器IP,也可以做host解析:harbor.od.com 默认账号:admin 默认密码:Harbor12345 登录后创建一个新的仓库,一会测试用
6、私有仓库推镜像
docker pull nginx:1.7.9 docker login harbor.od.com docker tag 84581e99d807 harbor.od.com/public/nginx:v1.7.9 docker push harbor.od.com/public/nginx:v1.7.9
然后去私有仓库上看下:
五、搭建etcd集群
1、签发证书
vim /opt/certs/ca-config.json { "signing": { "default": { "expiry": "175200h" }, "profiles": { "server": { "expiry": "175200h", "usages": [ "signing", "key encipherment", "server auth" ] }, "client": { "expiry": "175200h", "usages": [ "signing", "key encipherment", "client auth" ] }, "peer": { "expiry": "175200h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } } vim /opt/certs/etcd-peer-csr.json { "CN": "k8s-etcd", "hosts": [ "192.168.112.20", "192.168.112.21", "192.168.112.22", "192.168.112.23" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "BeiJing", "ST": "BeiJing", "O": "od", "OU": "ops" } ] } cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-peer-csr.json | cfssl-json -bare etcd-peer
2、在需要安装etcd服务得主机上创建etcd用户
按照架构设计,在21,22, 23三台上部署etcd服务:
首先创建etcd用户:
useradd -s /sbin/nologin -M etcd id etcd
3、安装etcd
wget https://github.com/etcd-io/etcd/releases/download/v3.1.20/etcd-v3.1.20-linux-amd64.tar.gz tar -zxvf etcd-v3.1.20-linux-amd64.tar.gz ln -s /opt/etcd-v3.1.20-linux-amd64 /opt/etcd mkdir -p /opt/etcd/certs /data/etcd /data/logs/etcd-server
4、编写启动脚本
scp operations:/opt/certs/ca.pem . scp operations:/opt/certs/etcd-peer.pem . scp operations:/opt/certs/etcd-peer-key.pem . vim /opt/etcd/etcd-server-startup.sh #!/bin/sh ./etcd --name etcd-server-112-21 \ --data-dir /data/etcd/etcd-server \ --listen-peer-urls https://192.168.112.21:2380 \ --listen-client-urls https://192.168.112.21:2379,http://127.0.0.1:2379 \ --quota-backend-bytes 8000000000 \ --initial-advertise-peer-urls https://192.168.112.21:2380 \ --advertise-client-urls https://192.168.112.21:2379,http://127.0.0.1:2379 \ --initial-cluster etcd-server-112-21=https://192.168.112.21:2380,etcd-server-112-22=https://192.168.112.22:2380,etcd-server-112-23=https://192.168.112.23:2380 \ --ca-file ./certs/ca.pem \ --cert-file ./certs/etcd-peer.pem \ --key-file ./certs/etcd-peer-key.pem \ --client-cert-auth \ --trusted-ca-file ./certs/ca.pem \ --peer-ca-file ./certs/ca.pem \ --peer-cert-file ./certs/etcd-peer.pem \ --peer-key-file ./certs/etcd-peer-key.pem \ --peer-client-cert-auth \ --peer-trusted-ca-file ./certs/ca.pem \ --log-output stdout chmod +x /opt/etcd/etcd-server-startup.sh chown -R etcd.etcd /data/etcd/ chown -R etcd.etcd /data/logs/etcd-server/ chown -R etcd.etcd /opt/etcd-v3.1.20-linux-amd64/ chown -R etcd.etcd /opt/etcd/ chown -R etcd.etcd /opt/etcd/certs
六、安装etcdkeeper工具
etcd服务搭建完成后,里面其实存储了很多的key,如何查看和管理这些key,需要使用一个小工具,叫做etcdkeeper:
下载etcd,在etcd节点选一台
mkdir /opt/src && cd /opt/src wget https://github.com/evildecay/etcdkeeper/releases/download/v0.7.5/etcdkeeper-v0.7.5-linux_x86_64.zip 解开压缩包,需安装unzip: yum install unzip -y unzip etcdkeeper-*-linux_x86_64.zip rm etcdkeeper-*-linux_x86_64.zip mv etcdkeeper ../etcdkeeper-0.7.5 ln -s /opt/etcdkeeper-0.7.5/ /opt/etcdkeeper cd /opt/etcdkeeper chmod +x etcdkeeper
编写一个服务文件,该服务文件主要用于在后台运行etcd程序,用以提供http服务
cd /lib/systemd/system vim etcdkeeper.service [Unit] Description=etcdkeeper service After=network.target [Service] Type=simple ExecStart=/opt/etcdkeeper/etcdkeeper -h 192.168.112.21 -p 8800 ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure PrivateTmp=true [Install] WantedBy=multi-user.target -h 指定etcdkeeper http监听的地址,这里监听的是IPV4地址10.4.7.12 -p 指定etcdkeeper http监听的端口 # systemctl start etcdkeeper 启动etcdkeeper服务 # systemctl stop etcdkeeper 停止etcdkeeper服务 # systemctl enable etcdkeeper.service 设置开机自启动 # systemctl disable etcdkeeper.service 停止开机自启动 访问安全 如果启用了etcd自身的授权,无需特别关心 如果没有自动,可以考虑使用Nginx反代,使用base auth授权. 遗留的问题 当发布到公网环境时,v2可以查看到数据,v3查看不到数据。 目前没查到原因. 测试访问 http://192.168.112.20:8800/etcdkeeper/
华为云开年送福利:
福利1:免费试用海外云主机和云原生容器
进入免费试用专区 【实名才可领取】:
福利2:超低折扣
原价1244.76元一年的1C2G1M带宽的服务器现在只需要:99元,赠送主机安全
福利三:
终极大奖,华为云永久VIP(实名注册第59、119、189...以此类推)
购买华为云永久8折权限(除云专线,硬件产品,混托类产品,域名,竞价实例,储值卡,云市场产品,国际云联盟节点,HCS Online解决文案以上特定产品),均可享永久8折。
参与攻略:
1,长按识别下方二维码关联注册即可
2,实名认证
接下来,就可以静等开奖了,此活动持续到月底结束,我们会每隔五个工作日后进行开奖,请小伙伴注意查收。