1 k8s组件介绍以及kubeasz二进制安装

一 k8s组件功能

1 kube-apiserver

kube-apiserver | Kubernetes 官方介绍
API server 提供了k8s各类资源对象的增删改查以及watch等http rest接口。所有其他组件都它进行通信。是集群的统一入口,默认端口为6443

2 kube-scheduler

kube-scheduler | Kubernetes 官方介绍
调度器,负责将pod指派到某个节点上,先排除不符合条件的节点,然后在剩余的节点进行删选,最后选中节点,创建pod.

3 kube-controller-manager

kube-controller-manager | Kubernetes 官方介绍
负责维护集群的状态,比如程序部署,故障检查,自动扩展,滚动更新,确保集群中的pod正常工作

4 kube-proxy

kube-proxy | Kubernetes 官方介绍
运行在每个节点上,监听apiserver中服务对象的变化,再通过iptables或者ipvs实现网络的转发。主要负责集群内部的网络通信

5 kublet

kubelet | Kubernetes 官方介绍
kubelet 是运行在每个node节点上的代理组件,它监视每个node上的pod.
负责上master汇报node节点的健康状态
接受指令并在pod中创建docker容器
准备pod所需的数据卷
返回pod的运行状态
在node节点执行容器健康检查

6 kubectl

kubectl | Kubernetes
是集群管理的客户端工具

7 etcd

为 Kubernetes 运行 etcd 集群 | Kubernetes
负责存储集群中各种资源对象信息

8 dns

自定义 DNS 服务 | Kubernetes 官方介绍
负责为整个集群提供dns服务,从而实现服务直接的访问

二 k8s中创建pod的调度流程

1.用户使用create/apply yaml创建pod,请求给apiseerver,apiserver将yaml中的属性信息(metadata)写入etcd。
2.apiserver触发watch机制准备创建pod,信息转发给调度器,调度器使用调度算法选择node,调度器将node信息给apiserver,apiserver_将绑定的node信息写入etcd。
3.apiserver又通过watch机制,调用kubelet,指定pod信息,触发docker run命 令创建容器。
4.创建完成之后反馈给kubelet,kubelet又将pod的状态信息给apiserver,apiserver又将pod的状态信息写入etcd。
5.其中kubectl get pods命令调用的时etcd_的信息。

三 k8s系统环境准备

1 环境说明:

2 master 2etcd 2node 2高可用+harbor
master01  172.31.7.101
master02 172.31.7.102
etcd01 172.31.7.106
etcd02 172.31.7.107
node1 172.31.7.111
node2 172.31.7.112
ha1 172.31.7.109
ha2 172.31.7.110
虚拟vip 172.31.7.188

centos7.9
k8s.1.23
docker: docker-19.03.15-binary-install.tar.gz

2 所有服务器进行时间同步

echo "*/5 * * * * ntpdate time1.aliyun.com &> /dev/null  && hwclock -w" >> /var/spool/cron/crontabs/root

3 系统初始化

主机名,ip,系统参数优化,seliunx关闭,开启ip转发

hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
hostnamectl set-hostname k8s-etcd1
hostnamectl set-hostname k8s-etcd2
hostnamectl set-hostname k8s-master1
hostnamectl set-hostname k8s-master2
hostnamectl set-hostname k8s-ha1
hostnamectl set-hostname k8s-ha2

4 内核参数调整

 cat /etc/sysctl.d/95-k8s-sysctl.conf 
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-arptables = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.core.somaxconn = 32768
net.netfilter.nf_conntrack_max=1000000
vm.swappiness = 0
vm.max_map_count=655360
fs.file-max=6553600
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 10

四 高可用服务器安装

1 安装haproxy,keepalived

yum install keepalived
yum install haproxy

2 keepalivd主配置文件如下:

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      172.31.7.188 dev ens33 label ens33:1
    }
}

3 启动keepalived

systemctl enable keepalived
 systemctl start keepalived

从配置文件要更改一下权重,还有MASTER变为BACKUP

然后用ifconfig可以查看vip是否存在。

4 haproxy配置文件,两台配置一样

listen k8s_api_nodes_6443
   bind 172.31.7.188:6443
   mode tcp
   server 172.31.7.101 172.31.7.101:6443 check inter 2000 fall 3 rise 5
   server 172.31.7.102 172.31.7.102:6443 check inter 2000 fall 3 rise 5

5 启动haproxy


systemctl start haproxy
 systemctl enable haproxy

五 在各个master和node节点 还有harbor上都安装docker

1 安装docker

cd /usr/local/src
tar -zxvf docker-19.03.15-binary-install.tar.gz 

  ./docker-install.sh 

六 安装harbor并启用https

1 生成证书


cd /usr/local/src
mkdir app
cd app
tar -zxvf harbor-offline-installer-v2.4.2.tgz 
# 生成证书
openssl genrsa -out /usr/local/src/app/harbor/certs/harbor-ca.key
 openssl req -x509 -new -nodes -key ./harbor-ca.key  -subj "/CN=harbor.magedu.local" -days 7120 -out ./harbor-ca.crt

2 更改配置文件


[root@k8s-harbor01 harbor]# pwd
/usr/local/src/app/harbor
[root@k8s-harbor01 harbor]# cp harbor.yml.tmpl harbor.yml
# 配置文件只更改了如下选项,hostname,证书,密码
grep -v "^#" harbor.yml |grep -v "^$"|grep -v "#"
hostname: harbor.magedu.local
http:
  port: 80
https:
  port: 443
  certificate: /usr/local/src/app/harbor/certs/harbor-ca.crt
  private_key: /usr/local/src/app/harbor/certs/harbor-ca.key
harbor_admin_password: 123456

3 安装

./install.sh --with-trivy
./install.sh --help 
运行完之后服务会自动启动

额外补充命令:

停止命令 docker-compose stop
启动命令 docker-compose up -d
删除镜像  docker-compose down --rmi  all

docker-compose down [options]

停止和删除容器、网络、卷、镜像。 选项包括:
–rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
-v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
–remove-orphans,删除服务中没有在compose中定义的容器

七 部署docker登录证书


 ### 1 部署节点创建这个目录(也就是我的master节点)
 mkdir -p /etc/docker/certs.d/harbor.magedu.local
# harbor上拷贝证书到部署节点
[root@k8s-harbor01 harbor]# scp -r /usr/local/src/app/harbor/certs/harbor-ca.crt root@172.31.7.101:/etc/docker/certs.d/harbor.magedu.local

2 添加hosts文件

[root@k8s-master01 ~]# cat /etc/hosts
172.31.7.109 harbor.magedu.local

重启docker
systemctl restart docker

3 登录,并上传镜像

docker login harbor.magedu.com

docker pull alpine

  docker  tag alpine harbor.magedu.com/library/alpine:mage

  docker push harbor.magedu.com/library/alpine:mage

效果如图所示:

八 利用kubeasz进行集群安装

https://gitee.com/ilanni/kubeasz 版本对比

1 安装ansible

yum install epel-release
yum install ansible

2 生成密钥并拷贝到各个节点

ssh-keygen

拷贝脚本如下:

#!/bin/bash
ip="
172.31.7.102
172.31.7.111
172.31.7.112
172.31.7.106
172.31.7.107
"
for node in ${ip};do
  sshpass -p redhat ssh-copy-id ${node} -o StrictHostKeyChecking=no
  if [ $? -eq 0 ];then
    echo "${node}密钥拷贝完成"
  else
    echo "${node}密钥拷贝失败"
  fi
done

3 下载kubeasz 项目源码

不同的kubeasz版本,安装的k8s版本也不一样

# 下载工具脚本ezdown,举例使用kubeasz版本3.0.0
export release=3.2.0
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
# 使用工具脚本下载
./ezdown -D

下载好的脚本包括镜像都存放到了/etc/kubeasz 这个目录

4 创建集群并生成配置文件

[root@k8s-master02 kubeasz]# ./ezctl new k8s-cluster01
2022-04-16 18:40:43 DEBUG generate custom cluster files in /etc/kubeasz/clusters/k8s-cluster01
2022-04-16 18:40:43 DEBUG set versions
2022-04-16 18:40:44 DEBUG disable registry mirrors
2022-04-16 18:40:44 DEBUG cluster k8s-cluster01: files successfully created.
2022-04-16 18:40:44 INFO next steps 1: to config '/etc/kubeasz/clusters/k8s-cluster01/hosts'
2022-04-16 18:40:44 INFO next steps 2: to config '/etc/kubeasz/clusters/k8s-cluster01/config.yml'



5 编辑host文件

vim /etc/kubeasz/clusters/k8s-cluster01/hosts


[etcd]
172.31.7.106
172.31.7.107
[kube_master]
172.31.7.101
172.31.7.102
[kube_node]
172.31.7.111
172.31.7.112
[harbor]
[ex_lb]
172.31.7.109 LB_ROLE=backup EX_APISERVER_VIP=172.31.7.188 EX_APISERVER_PORT=6443
172.31.7.110 LB_ROLE=master EX_APISERVER_VIP=172.31.7.188 EX_APISERVER_PORT=6443
[chrony]
[all:vars]
SECURE_PORT="6443"
CONTAINER_RUNTIME="docker"
CLUSTER_NETWORK="calico"
PROXY_MODE="ipvs"
SERVICE_CIDR="10.200.0.0/16"
CLUSTER_CIDR="10.100.0.0/16"
NODE_PORT_RANGE="30000-65000"
CLUSTER_DNS_DOMAIN="magedu.local"
bin_dir="/opt/kube/bin"
base_dir="/etc/kubeasz"
cluster_dir="{{ base_dir }}/clusters/k8s-cluster01"
ca_dir="/etc/kubernetes/ssl"

6 编辑config.yml

改证书时间
改k8s 集群 master 节点证书配置,可以添加多个ip和域名(比如增加公网ip和域名)

改node节点最大的pod数量
改harbor信任的节点,只针对http的,https不用配置
改calico ,默认就可以
改dns缓存,默认是true,线上环境可以是true

7 安装

./ezctl setup k8s-cluster01 01   #第一步
./ezctl setup k8s-cluster01 02
./ezctl setup k8s-cluster01 03
./ezctl setup k8s-cluster01 04
./ezctl setup k8s-cluster01 05
./ezctl setup k8s-cluster01 06

查看 节点的状态

8 验证calico

/opt/kube/bin/calicoctl node status

在master上查看网络,只能查看到node节点的,我这里只有一台node

在node节点上查看,只能看到master节点的

9 测试网络

用centos或者busybox都可以

kubectl  run net-test1 --image=centos:7.9.2009 sleep 3600000
kubectl  run net-test2 --image=centos:7.9.2009 sleep 3600000
kubectl run test --image=busybox sleep 30000

进入这两个pod之中,然后互相ping一下ip,看是否可以通信

posted @ 2022-04-18 10:06  huningfei  阅读(407)  评论(0)    收藏  举报
levels of contents