2. Kubernetes部署

发布于:2022-07-26 ⋅ 阅读:(327) ⋅ 点赞:(0)

2. Kubernetes部署(CentOS 7.0)

2.1 部署架构

Alt

2.2 环境准备

2.2.1 关闭系统服务

Kubernetes集群中Master和Node节点间会有大量的网络通信,安全的做法是在防火墙上配置各组件需要相互通信的端口号;建议关闭SELinux让容器可以读取主机文件系统;kubeadm服务推荐关闭交换空间swap的使用。

  • 临时关闭防火墙: systemctl stop firewalld
  • 永久关闭防火墙: systemctl disable firewalld
  • 临时关闭邮件服务: systemctl stop postfix
  • 永久关闭邮件服务: systemctl disable postfix
  • 临时关闭selinux: setenforce 0
  • 永久关闭selinux: sed -i ‘s/enforcing/disabled/’ /etc/selinux/config
  • 临时关闭swap: swapoff -a
  • 永久关闭swap: sed -ri ‘s/.swap./#&/’ /etc/fstab

2.2.2 规划主机名称

  • Master节点: hostnamectl set-hostname K8sMaster43-11
  • Worker节点: hostnamectl set-hostname K8sWorker43-21/22
  • Hubbor仓库: hostnamectl set-hostname DockerHub43-101

2.2.3 添加域名解析

  1. vi /etc/hosts打开文件,添加地址与域名对应关系:
192.168.43.11 K8sMaster43-11 // Master节点域名
192.168.43.21 K8sWorker43-21 // Worker节点域名
192.168.43.22 K8sWorker43-22 // Worker节点域名
192.168.43.101 hub.docker-local.com // 本地镜像仓库域名

2.2.4 配置IPTABLE

  1. vi /etc/sysctl.d/kubernetes.conf打开文件,添加IPv4流量传递到IPTable链:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.all.disable_ipv6 = 1
  1. sysctl -p /etc/sysctl.d/kubernetes.conf && sysctl --system命令启动生效。

2.2.5 同步系统时间

  1. yum install --downloadonly --downloaddir=/root/install-package-ntpdate/ ntpdate下载时间同步命令安装包;
  2. rpm -ivh ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm安装时间同步命令;
  3. ntpdate time.windows.com系统时间与Windows时间同步服务器同步。

2.2.6 设置日志服务

  1. mkdir /var/log/journal && mkdir /etc/systemd/journald.conf.d创建日志目录;
  2. vi /etc/systemd/journald.conf.d/99-prophet.conf打开文件,配置日志服务:
[Journal]
Storage=persistent
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
ReteLimitBurst=1000
SystemMaxUse=10G
SystemMasFileSize=200M
MaxRetentionSec=2week
ForwardToSyslog=no
  1. systemctl restart systemd-journald重启日志服务。

2.2.7 升级系统内核

Kubernetes要求kernel版本在3.10以上,部分组件需要kernel版本在4.4以上。

  1. rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm下安装包;
  2. yum --enablerepo=elrepo-kernel install -y kernel-lt安装4.4+内核版本;
  3. grub2-set-default "CentOS Linux (4.4.247-1.el7.elrepo.x86_64) 7 (Core)"设置开机加载;
  4. reboot重启服务器。

2.2.8 配置IPVS网络

  1. modprobe br_netfilter设置开机自启动模式;
  2. vi /etc/sysconfig/modules/ipvs.modules打开文件,添加ipvs启动脚本:
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
  1. chmod 755 /etc/sysconfig/modules/ipvs.modules赋予执行权限;
  2. /etc/sysconfig/modules/ipvs.modules执行ipvs启动脚步;
  3. lsmod | grep -e ip_vs -e nf_conntrack_ipv4查看引导模块启动状态;
  4. yum install --downloadonly --downloaddir=/root/install-package-ipvsadm ipvsadm下载IPVS管理命令;
  5. rpm -ivh ipvsadm-1.27-8.el7.x86_64.rpm安装IPVS管理命令;
  6. 使用ipvsadm -Ln查看当前IPVS配置。

2.2.9 修改Docker配置

  1. vi /etc/docker/daemon.json打开Docker配置文件,修改配置:
{
  "exec-opts": ["native.cgroupdriver=systemd"], // Cgroup Driver驱动
  "registry-mirrors": ["https://aypyoiv7.mirror.aliyuncs.com"],
  "insecure-registries": ["https://hub.docker-local.com"] // 私库地址
}
  1. systemctl daemon-reload && systemctl restart docker重启Docker服务。

2.3 快速部署

2.3.1 安装Kubernetes

  1. vi /etc/yum.repos.d/kubernetes.repo打开配置文件,添加阿里源:
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  1. yum install --downloadonly --downloaddir=/root/install-packages-kubernetes kubeadm kubelet kubectl下载kubernetes最新版本;
  2. rpm -ivh *.rpm --nodeps --force安装kubernetes最新版本;
  3. systemctl start kubelet && systemctl enable kubelet启动kubelet服务;
  4. systemctl status kubelet查看kubelet服务状态为loading,错误码是255。

2.3.2 部署Master节点

  1. kubeadm config print init-defaults > /root/install-configs-kubernetes/kubeadm-config.yaml生成并修改配置:
localAPIEndpoint:
  advertiseAddress: 192.168.43.11 // 修改为当前Master节点地址
imageRepository: registry.aliyuncs.com/google_containers // 修改组件下载源
kubernetesVersion: v1.19.3 // 修改为需要的K8S版本
networking:
  podSubnet: 10.244.0.0/16    // 添加POD的网段
  serviceSubnet: 10.96.0.0/12 // 修改SVC的网段
--- // 添加IPVS网络模式
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
  SupportIPVSProxyMode: true
mode: ipvs
  1. kubeadm config images list --config= kubeadm-config.yaml列出所需的镜像列表;kubeadm config images pull --config= kubeadm-config.yaml拉取镜像到本地(可以到install-images-kubernetes目录使用docker load命令安装镜像);
  2. kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log初始化Kubernetes环境,过程中会下载APIServer、ETCD、ControllerManager、Scheduler、kube-proxy、pause、coredns镜像组件;
  3. 查看kubedam-init.log日志,在/etc/kubernetes存放各组件的证书、配置文件、资源清单;
  4. mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config将配置拷贝到当前用户目录;
  5. kubectl get nodes && kubectl get all -n kube-system -o wide在Master查看Kubernetes中的节点信息;kubectl get ConfigMap -n kube-system在Master查看Kubernetes的配置文件可以看到kubeadm-config就是kubeadm-config.yaml初始化配置文件。

2.3.3 部署Worker节点

  1. 在Master节点通过kubeadm token list查看集群的token;openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'查看集群根证书的哈希值;
  2. kubeadm config print join-defaults > /root/install-configs-kubernetes/kubeadm-config.yaml生成并修改配置:
apiServerEndpoint: 192.168.43.11:6443      // 修改为当前APIServer的地址
token: abcdef.0123456789abcdef             // 修改为上面查询到的token值
tlsBootstrapToken: abcdef.0123456789abcdef // 修改为上面查询到的token值
  1. kubeadm join --config=kubeadm-config.yaml --upload-certs | tee kubeadm-join.log将Worker节点加入Kubernetes环境,过程中会下载kube-proxy、pause镜像组件(可以在加入集群前到install-images-kubernetes目录安装镜像);
  2. 查看kubedam-join.log日志,在/etc/kubernetes存放CA证书、kubelet配置文件;
  3. kubectl get nodes && kubectl get pods -n kube-system -o wide在Master查看Kubernetes中的节点信息,由于没有安装网络插件所以节点为NotReady状态;如果希望Master节点也作为工作负载节点则执行kubectl taint nodes –all node-role.kubernetes.io/master=删除Master节点指定标签可以让其成为一个Worker。

2.4 组件部署

2.4.1 部署Flannel组件

由Kubeadm快速部署的安装过程不涉及网络插件的初始化,因此通过kubeadm init初步安装完成的Kubernetes集群不具备网络功能,任何Pod包括自带的CoreDNS都无法正常工作,所以需要部署网络插件。

  1. 在Master节点下载kube-flannel.yml插件资源文件;
  2. kubectl apply -f kube-flannel.yml安装网络插件,过程中Master节点和Worker节点都会下载flannel镜像组件,Worker节点还会下coredns镜像组件(可以在创建资源前到install-images-flannel目录安装镜像);
  3. kubectl get nodes && kubectl get pods -n kube-system -o wide在Master查看Kubernetes中的节点信息。

2.4.2 部署Ingress组件

  1. 在Master下载mandatory.yaml和service-nodeport.yaml插件资源文件;
  2. kubectl apply -f mandatory.yaml创建YAML定义的Namespace、ClusterRole、Role、Deployment和Service资源,过程中Worker节点会下载nginx-ingress-controller组件镜像(可以在创建资源前到install-images-ingress目录安装镜像);
  3. kubectl get all -n ingress-nginx查看ingress-nginx名称空间内的所有资源;
  4. 使用curl IngressClusterIP:80/443 && curl IngressCIP:80/443命令在集群内部节点测试Ingress-Controller服务、curl NodeIP:HTTPPort/HTTPSPort命令在集群外部节点测试Ingress-Controller服务。

2.5 本地仓库服务

2.5.1 添加域名解析

  1. vi /etc/hosts打开文件,添加地址与域名对应关系:
192.168.43.11 K8sMaster43-11 // Master节点域名
192.168.43.21 K8sWorker43-21 // Worker节点域名
192.168.43.22 K8sWorker43-22 // Worker节点域名
192.168.43.101 hub.docker-local.com // 本地镜像仓库域名

2.5.2 修改Docker配置

  1. vi /etc/docker/daemon.json打开Docker配置文件,修改配置:
{
  "exec-opts": ["native.cgroupdriver=systemd"], // Cgroup Driver驱动
  "registry-mirrors": ["https://aypyoiv7.mirror.aliyuncs.com"],
  "insecure-registries": ["https://hub.docker-local.com"] // 本地镜像仓库地址
}
  1. systemctl daemon-reload && systemctl restart docker重启Docker服务。

2.5.3 安装DockerCompose

  1. curl -L “https://github.com/docker/compose/releases/download/1.27.4/docker-compose- ( u n a m e − s ) − (uname -s)- (unames)(uname -m)” -o /usr/local/bin/docker-compose下载docker-compose到系统目录;
  2. chomd a+x /usr/local/bin/docker-compose赋予可执行权限。

2.5.4 生成仓库证书

  1. mkdir /root/harbor/data/gen_cert创建证书生成目录;
  2. openssl genrsa -des3 -out server.key 2048生产私钥;
  3. openssl req -new-key server.key -out server.csr生产证书请求;
  4. openssl rsa -in server.key -out server_no.key私钥脱敏;
  5. openssl x509 -req -days 365 -in server.csr -signkey server_no.key -out server.crt生产证书。

2.5.5 部署仓库后台

  1. tar zxvf harbor-offline-installer-v1.10.1.tgz上传并解压资源文件;
  2. vi /root/harbor/harbor.yml打开配置文件,修改配置参数:
hostname: hub.docker-local.com  // 本地私有仓库的域名
certificate: /root/harbor/data/your/certificate/server.crt   // 证书
private_key: /root/harbor/data/your/private/key/server_no.key// 私钥
harbor_admin_password: 11111111 // 本地私有仓库的登录密码
data_volume: /root/harbor/data  // 本地私钥仓库的数据目录
password: 11111111              // 私钥仓库数据库登录密码
location: /root/harbor/data/logs// 本地私钥仓库的日志目录
  1. 创建配置文件设置的证书目录、私钥目录、数据目录、日志目录,将上面生成的证书和私钥放入对应目录内;
  2. ./install.sh检测并运行本地私有仓库,过程中会下载harbor、nginx、redis等镜像组件,成功后会生产docker-compose配置、日志、数据等内容(可以在执行脚本前到install-images-harbor目录安装镜像);
  3. 关闭后可以通过docker-compose start命令启动。

2.5.6 管理本地仓库

  1. https://192.168.43.101访问管理界面,通过用户名(admin)和密码(11111111)登录本地仓库。
  2. 在C:\Windows\System32\drivers\etc\hosts文件中添加域名解析,https://hub.docker-local.com/访问管理界面,通过用户名(admin)和密码(11111111)登录本地仓库。

2.5.7 使用本地仓库

  1. docker login https://hub.docker-local.com 在Master和Worker节点测试本地镜像仓库;
  2. docker tag nginx:latest hub.docker-local.com/library/nginx:v1按仓库要求标记镜像;
  3. docker push hub.docker-local.com/library/nginx:v1镜像推送到本地镜像仓库;
  4. docker pull hub.docker-local.com/library/nginx:v1从本地镜像仓库下载镜像。
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到