Kubernetes(K8s) 学习笔记 updating...

官网:

https://kubernetes.io/
https://github.com/kubernetes/kubernetes

谷歌Borg,后经过Go语言重写并捐献给CNCF基金会开源

Kubernetes    舵手/飞行员     

开源的容器编排框架工具(生态极其丰富)

Pod/Pod控制器

Pod

Pod控制器 

 

Name/Namespace

Name

Namespace

  

Label/Label选择器

Label

 Label选择器

Service/Ingress 

Service

  

Ingress

 

kube-apiserver服务

controller-manager 

  

 scheduler

kubelet

kube-proxy

PS: k8s 三种网络  及IP划分推荐

NODE 节点网络(宿主机网络)  10.x.x.0/24

POD 容器网络  172.x.0.0/16

Service 集群网络   192.168.x.x/16

IP规划每个ip号码要有具体意义,便于排错  POD和NODE 要近似:

例如:

10 段代表Node网络

172 段代表Pod网络

192 段代表 Service网络

10.4.7.x/16     代表Node节点,4号机房下面的测试服务器,x号  

10 = IDC的私有地址

4 = 机房区域(比如代表)

7 = 不同的项目,不同的环境(7测试,8预生产,9生产)

172.4.7.x/24  代表Pod节点,4号机房下面的测试服务器

 K8S 逻辑架构图 参考

K8S 集群架构图

 # 5台主机,1个VIP

10.4.7.10  VIP

10.4.7.200  运维主机

10.4.7.11  master   

10.4.7.12  standby 

10.4.7.21  主控节点、运算节点  核心组件

104.7.22   主控节点、运算节点   核心组件

K8S部署方式种:

Minikube  

# 直接Webshell 体验

https://kubernetes.io/zh/docs/tutorials/hello-minikube/

二进制安装部署

SSL 需要自签发证书(自签发证书:默认一年)

# 环境简介

192.168.27.101

192.168.27.102

192.168.27.103

192.168.27.104

192.168.27.105

# 初始化设置

安装和克隆虚拟机(略)

hostnamectl set-hostname <主机名>

调整yum源

yum install epel-release

关闭selinux和firewalld

setenforce 0

systemctl stop firewalld

必备工具安装

yum install wget net-tools telnet tree nmap sysstat lrzsz dos2unix bind-utils ntpdate -y

ntpdate ntp1.aliyun.com  # 把所有测试机时间同步

安装DNS(bind)在 27.101

sudo yum install bind -y

主配置文件

vi /etc/named.conf

----------------修改内容--------------------

listen-on port 53 { 192.168.27.101; };

allow-query     { any; };

dnssec-enable no;
dnssec-validation no;

-------------------增加内容-------------------

forwarders      { 114.114.114.114; };  # 设置可用的DNS地址

# 检查DNS配置文件设置是否成功

sudo named-checkconf   # 没有报错表示成功

区域配置文件

/etc/named.rfc1912.zones 

---------------增加内容------------------------

zone "host.com" IN {
type master;
file "host.com.zone";
allow-update { 192.168.27.11; };
};

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

区域数据文件

/var/named/host.com.zone

---------------增加内容----------------------------

$ORIGIN host.com.
$TTL 600        ; 10 minutes
@       IN SOA  dns.host.com. dnsadmin.host.com. (
                                2020071001  ; 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.27.101
HDSS7-11                A    192.168.27.101
HDSS7-12                A    192.168.27.102
HDSS7-21                A    192.168.27.103
HDSS7-22                A    192.168.27.104
HDSS7-200               A    192.168.27.105

/var/named/od.com.zone

---------------增加内容----------------------------

$ORIGIN od.com.
$TTL 600        ; 10 minutes
@       IN SOA  dns.host.com. dnsadmin.od.com. (
                                2020071001    ; 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.27.101

再次效验dns配置文件

named-checkconf

启动DNS服务

systemctl start named

使用dig测试解析结果

dig -t A hdss7-21.host.com @192.168.27.101 +short

看到此结果表示dns生效,现在就把你本地的dns指向到这个DNS服务器

 vim /etc/sysconfig/network-scripts/ifcfg-ensXXX 

------------------修改配置文件---------------------

DNS1=192.168.27.101   # IP为你搭建的DNS服务器IP

Tips: 添加短域名解析

/etc/resolv.conf

# Generated by NetworkManager
search host.com  # 一般仅用于主机域
nameserver 192.168.27.101

# 使用短域名进行ping 也是可以解析

把所有剩下的服务器全部主DNS修改为192.168.27.101

准备签发证书环境

在运维主机上HDSS7-200(192.168.27.105)上:

CFSSL

是CloudFlare开源的一款PKI/TLS工具。 CFSSL 包含一个命令行工具 和一个用于 签名,验证并且捆绑TLS证书的 HTTP API 服务。 使用Go语言编写。

Github 地址: https://github.com/cloudflare/cfssl
官网地址: https://pkg.cfssl.org/

安装CFSSL

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/bin/cfssl

wget https://pkg.cfssl.org/R1.1/cfssljson_linux-amd64 -O /usr/bin/cfssl-json

wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/bin/cfss-certinfo

chmod +x /usr/bin/cfssl*

创建一个证书目录

mkdir -p /opt/certs

sudo sh -c "cfssl print-defaults config > config.json"  # 生成一个配置模板(这个步骤可以省略)

sudo sh -c " cfssl print-defaults csr > ca-csr.json"  # 生成证书信息文件

创建文件  /opt/certs/ca-csr.json

-------------增加内容--------------------------

{
    "CN": "Cdbaidu",
    "hosts": [
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Chengdu",
            "ST": "Chengdu",
            "O": "od",
            "OU": "ops"
        }
    ],
    "ca": {
        "expiry": "175200h"  # 20年
    }
}

签发生产字签证证书

cfssl gencert -initca ca-csr.json | sudo cfssl-json -bare ca

ca-csr.json # 上面编辑的文件名

ca 前缀

管道后面的是生产.pem文件

部署docker环境

HDSS7-200(192.168.27.105)

HDSS7-21(192.168.27.103)

HDSS7-22(192.168.27.104)

一条命令安装Docker环境

sh -c "curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun"

查看docker版本

配置参数

sudo vim /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",  # 这里根据自己HDSS7-21,设置了172.7.21.1/24方便记忆和排错
    "exec-opts": ["native.cgroupdriver=systemd"],
    "live-restore": true
}

sudo systemctl start docker # 启动docker服务

检查三台是否都已经成功配置docker引擎

docker version

部署docker私有镜像仓库

HDSS7-200(192.168.27.105)

barbor 官方github地址

下载完毕后进行解压 

tar xf harbor-offline-installer-v2.0.1.tgz -C /opt/

mv harbor harbor-v2.0.1  # 增加版本号备注

ln -s /opt/harbor-v2.0.1/ /opt/harbor  # 创建软链接便于以后升级

PS:harbor 依赖 docker-compose

yum install docker-compose -y

sudo mkdir -p /data/harbor/logs  # 如果修改了日志存放目录需要创建对应目录

修改配置文件

cp /opt/harbor/harbor.yml.tmpl /opt/harbor/harbor.yml # 把模板文件变成正式的配置文件

----------------修改下面内容------------------------

http:
port: 180

hostname: harbor.od.com

harbor_admin_password: Harbor12345  # 生产环境自行修改

database:
password: root123  # 生产环境自行修改

data_volume:/data/harbor

location:/data/harbor/logs

开始执行harbor 脚本

/opt/harbor/install.sh

Note:遇到报错

ERROR:root:Error: The protocol is https but attribute ssl_cert is not set

方法一: 可以在配置文件里面注释掉和443相关部分

 方法二:配置相关https的证书认证

https://www.cnblogs.com/Dev0ps/p/10566398.html

脚本执行成功,如下提示:

 进行自检,输入  sudo docker-compose ps

看到harbor 给我们拉取和启用的各种镜像

安装Nginx

yum install nginx -y 

创建配置文件

/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;
    }
}

检测nginx配置文件语法是否正常

sudo nginx -t

启动nginx

systemctl start nginx

systemctl enable nginx

PS: 这里为了方便,需要在HDSS7-11(192.168.27.101)添加一条dns记录.

vi /var/named/od.com.zone

-----------------修改和添加内容(见黄底红字处)----------------------

$ORIGIN od.com.
$TTL 600        ; 10 minutes
@       IN SOA  dns.host.com. dnsadmin.od.com. (
                                2020071002    ; 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.27.101
harbor                  A    192.168.27.105

systemctl restart named

添加后进行测试,DNS是否成功

dig -t A harbor.od.com +short

使用客户端访问:

http://harbor.od.com:180/  # 看到如下界面

Harbor 页面操作 

账号密码登陆--新建项目

# 在HDSS7-200(192.168.27.105)下载一个公网镜像

sudo docker pull nginx:1.7.9

docker tag <IMAGE ID > harbor.od.com/public/nginx:v.17.9 # 给公网镜像打一个tag

docker push harbor.od.com/public/nginx:v1.7.9  # 尝试推送到我们自己的私有仓库

Note: 错误提示

unauthorized: unauthorized to access repository: public/nginx, action: push: unauthorized to access repository: public/nginx, action: push

原因是需要登陆你的私有仓库,不然没有授权网上传。

docker login harbor.od.com

输入你私有仓库的账号密码,Push成功

部署Master节点服务

部署etcd集群

集群规划

HDSS7-12    角色:etcd lead      192.168.27.102

HDSS7-21    角色:etcd follow    192.168.27.103

HDSS7-22    角色:etcd follow    192.168.27.104

创建基于根证书的config配置文件

HDSS7-200(27.105)上 /opt/certs/

vim /opt/certs/ca-config.json 

-----------------------新增以下内容------------------------------

 1 {
 2     "signing": {
 3         "default": {
 4             "expiry": "1725200h"
 5         },
 6         "profiles": {
 7             "server": {
 8                 "expiry": "1725200h",
 9                 "usages": [
10                     "signing",
11                     "key encipherment",
12                     "server auth"
13                 ]
14             },
15             "client": {
16                 "expiry": "1725200h",
17                 "usages": [
18                     "signing",
19                     "key encipherment",
20                     "client auth"
21                 ]
22             },
23             "peer": {
24                 "expiry": "1725200h",
25                 "usages": [
26                     "signing",
27                     "key encipherment",
28                     "server auth",
29                     "client auth"
30                 ]
31             }
32         }
33     }
34 }

创建etcd-peer-csr文件

vim etcd-peer-csr.json

------------新增以下内容-----------------------

 1 {
 2     "CN": "k8s-etcd",
 3     "hosts": [
 4         "192.168.27.101",
 5         "192.168.27.102",
 6         "192.168.27.103",
 7         "192.168.27.104"
 8     ],
 9     "key": {
10         "algo": "rsa",
11         "size": 2048
12     },
13     "names": [
14         {
15             "C": "CN",
16             "ST": "beijing",
17             "L": "beijing",
18             "O": "od",
19             "OU": "ops"
20         }
21     ]
22 }

 签发证书 

依然保持/opt/crets目录下(确保上面2个文件已经创建成功)

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-peer-csr.json

# 产生签发证书文件

sudo cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-peer-csr.json | sudo cfssl-json -bare etcd-peer

 

回到节点:HDSS7-12(27.102)上 

创建用户

useradd -s /sbin/nologin -M etcd

-M 没有家目录

下载etcd的软件

etcd下载地址

# 教程里面推荐不超过3.3.x的版本

tar zxvf etcd-v3.x.x-linux-amd64.tar.gz -C /opt

cd /opt

ln -s /opt/etcd-v3.x.x /opt/etcd  

创建etcd的证书存放目录 

sudo mkdir -p /opt/etcd/certs /data/etcd /data/logs/etcd-server

# 拷贝上面生成的证书到/opt/etcd/certs 下面

给etcd目录授权权限 

chown -R etcd.etcd /opt/etcd-v3.1.20/

chown -R etcd.etcd /data/etcd

chown -R etcd.etcd /data/logs/etcd-server/

创建一个etcd的脚本

/opt/etcd/etcd-server-startup.sh

chmod +x /opt/etcd/etcd-server-startup.sh 

-------------------添加如下内容--------------------------

 1 #!/bin/sh
 2 ./etcd --name etcd-server-7-12 
 3        --data-dir /data/etcd/etcd-server 
 4        --listen-peer-urls https://192.168.27.102:2380 
 5        --listen-client-urls https://192.168.27.102:2379,http://127.0.0.1:2379 
 6        --quota-backend-bytes 8000000000 
 7        --initial-advertise-peer-urls https://192.168.27.102:2380 
 8        --advertise-client-urls https://192.168.27.102:2379,http://127.0.0.1:2379 
 9        --initial-cluster etcd-server-7-12=https://192.168.27.102:2380,etcd-server-7-21=https://192.168.27.103:2380,etcd-server-7-22=https://192.168.27.104:2380 
10        --ca-file ./certs/ca.pem 
11        --cert-file ./certs/etcd-peer.pem 
12        --key-file ./certs/etcd-peer-key.pem 
13        --client-cert-auth 
14        --trusted-ca-file ./certs/ca.pem 
15        --peer-ca-file ./certs/ca.pem 
16        --peer-cert-file ./certs/etcd-peer.pem 
17        --peer-key-file ./certs/etcd-peer-key.pem 
18        --peer-client-cert-auth 
19        --peer-trusted-ca-file ./certs/ca.pem 
20        --log-output stdout

# 安装一个辅助工具(用于让脚本自动运行,如果脚本停止自动启动)

yum install supervisor -y

systemctl start supervisord

systemctl enable supervisord

设置supervisor启动设置文件

vim /etc/supervisord.d/etcd-server.ini

-------------------添加下面内容------------------------

 1 [program: etcd-server-7-12]
 2 command=/opt/etcd/etcd-server-startup.sh
 3 numprocs=1
 4 directory=/opt/etcd 
 5 autostart=true 
 6 autorestart=true 
 7 startsecs=30
 8 startretries=3
 9 exitcodes=0,2
10 stopsignal=QUIT
11 stopwaitsecs=10
12 user=etcd
13 redirect_stderr=true
14 stdout_logfile=/data/logs/etcd-server/etcd.stdout.1og
15 stdout_logfile_maxbytes=64MB
16 stdout_logfile_backups=4
17 stdout_capture_maxbytes=1MB
18 stdout_events_enabled=false

开始操作supervisor

supervisorctl update

supervisorctl status

# 查看启动日志

tail -fn 200 /data/logs/etcd-server/etcd.stdout.1og

# 查看端口是否正常开启

sudo netstat -luntp |grep etcd

PS:3个节点都按照上面配置,注意标黄部分自己需要修改。

检查集群的健康状态

进入任意节点目录/opt/etcd/下,执行

./etcdctl cluster-health 

./etcdctl member list  # 通过这个命令可以查看到当前集群的leader

 部署kube-apiserver集群

HDSS7-21(27.103)

HDSS7-22(27.104)

这里部署以HDSS7-21 为例,另外一台配置相同

kubernetes 官方github地址 

kubernetes下载地址 

v1.15.2   v1.18.5

tar xf kubernetes-server-linux-amd64-v1.18.5.tar.gz -C /opt

cd /opt

mv kubernetes-server-linux-amd64 kubernetes-v1.18.5

ln -s kubernetes-v1.18.5 kubernetes

清理二进制安装无用包(可选)

/opt/kubernets/kubernetes-src.tar.gz  # go语言源码包

/opt/kubernetes/server/bin 下面所有tar包和_tag(docker镜像)

原文地址:https://www.cnblogs.com/Cong0ks/p/13267368.html