2. Kubernetes部署(CentOS 7.0)
2.1 部署架构

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 添加域名解析
- 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
- 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
- sysctl -p /etc/sysctl.d/kubernetes.conf && sysctl --system命令启动生效。
2.2.5 同步系统时间
- yum install --downloadonly --downloaddir=/root/install-package-ntpdate/ ntpdate下载时间同步命令安装包;
- rpm -ivh ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm安装时间同步命令;
- ntpdate time.windows.com系统时间与Windows时间同步服务器同步。
2.2.6 设置日志服务
- mkdir /var/log/journal && mkdir /etc/systemd/journald.conf.d创建日志目录;
- 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
- systemctl restart systemd-journald重启日志服务。
2.2.7 升级系统内核
Kubernetes要求kernel版本在3.10以上,部分组件需要kernel版本在4.4以上。
- rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm下安装包;
- yum --enablerepo=elrepo-kernel install -y kernel-lt安装4.4+内核版本;
- grub2-set-default "CentOS Linux (4.4.247-1.el7.elrepo.x86_64) 7 (Core)"设置开机加载;
- reboot重启服务器。
2.2.8 配置IPVS网络
- modprobe br_netfilter设置开机自启动模式;
- 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
- chmod 755 /etc/sysconfig/modules/ipvs.modules赋予执行权限;
- /etc/sysconfig/modules/ipvs.modules执行ipvs启动脚步;
- lsmod | grep -e ip_vs -e nf_conntrack_ipv4查看引导模块启动状态;
- yum install --downloadonly --downloaddir=/root/install-package-ipvsadm ipvsadm下载IPVS管理命令;
- rpm -ivh ipvsadm-1.27-8.el7.x86_64.rpm安装IPVS管理命令;
- 使用ipvsadm -Ln查看当前IPVS配置。
2.2.9 修改Docker配置
- 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"] // 私库地址
}
- systemctl daemon-reload && systemctl restart docker重启Docker服务。
2.3 快速部署
2.3.1 安装Kubernetes
- 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
- yum install --downloadonly --downloaddir=/root/install-packages-kubernetes kubeadm kubelet kubectl下载kubernetes最新版本;
- rpm -ivh *.rpm --nodeps --force安装kubernetes最新版本;
- systemctl start kubelet && systemctl enable kubelet启动kubelet服务;
- systemctl status kubelet查看kubelet服务状态为loading,错误码是255。
2.3.2 部署Master节点
- 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
- kubeadm config images list --config= kubeadm-config.yaml列出所需的镜像列表;kubeadm config images pull --config= kubeadm-config.yaml拉取镜像到本地(可以到install-images-kubernetes目录使用docker load命令安装镜像);
- kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log初始化Kubernetes环境,过程中会下载APIServer、ETCD、ControllerManager、Scheduler、kube-proxy、pause、coredns镜像组件;
- 查看kubedam-init.log日志,在/etc/kubernetes存放各组件的证书、配置文件、资源清单;
- mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && chown ( i d − u ) : (id -u): (id−u):(id -g) $HOME/.kube/config将配置拷贝到当前用户目录;
- 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节点
- 在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/^.* //'查看集群根证书的哈希值;
- 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值
- kubeadm join --config=kubeadm-config.yaml --upload-certs | tee kubeadm-join.log将Worker节点加入Kubernetes环境,过程中会下载kube-proxy、pause镜像组件(可以在加入集群前到install-images-kubernetes目录安装镜像);
- 查看kubedam-join.log日志,在/etc/kubernetes存放CA证书、kubelet配置文件;
- 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都无法正常工作,所以需要部署网络插件。
- 在Master节点下载kube-flannel.yml插件资源文件;
- kubectl apply -f kube-flannel.yml安装网络插件,过程中Master节点和Worker节点都会下载flannel镜像组件,Worker节点还会下coredns镜像组件(可以在创建资源前到install-images-flannel目录安装镜像);
- kubectl get nodes && kubectl get pods -n kube-system -o wide在Master查看Kubernetes中的节点信息。
2.4.2 部署Ingress组件
- 在Master下载mandatory.yaml和service-nodeport.yaml插件资源文件;
- kubectl apply -f mandatory.yaml创建YAML定义的Namespace、ClusterRole、Role、Deployment和Service资源,过程中Worker节点会下载nginx-ingress-controller组件镜像(可以在创建资源前到install-images-ingress目录安装镜像);
- kubectl get all -n ingress-nginx查看ingress-nginx名称空间内的所有资源;
- 使用curl IngressClusterIP:80/443 && curl IngressCIP:80/443命令在集群内部节点测试Ingress-Controller服务、curl NodeIP:HTTPPort/HTTPSPort命令在集群外部节点测试Ingress-Controller服务。
2.5 本地仓库服务
2.5.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配置
- 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"] // 本地镜像仓库地址
}
- systemctl daemon-reload && systemctl restart docker重启Docker服务。
2.5.3 安装DockerCompose
- curl -L “https://github.com/docker/compose/releases/download/1.27.4/docker-compose- ( u n a m e − s ) − (uname -s)- (uname−s)−(uname -m)” -o /usr/local/bin/docker-compose下载docker-compose到系统目录;
- chomd a+x /usr/local/bin/docker-compose赋予可执行权限。
2.5.4 生成仓库证书
- mkdir /root/harbor/data/gen_cert创建证书生成目录;
- openssl genrsa -des3 -out server.key 2048生产私钥;
- openssl req -new-key server.key -out server.csr生产证书请求;
- openssl rsa -in server.key -out server_no.key私钥脱敏;
- openssl x509 -req -days 365 -in server.csr -signkey server_no.key -out server.crt生产证书。
2.5.5 部署仓库后台
- tar zxvf harbor-offline-installer-v1.10.1.tgz上传并解压资源文件;
- 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// 本地私钥仓库的日志目录
- 创建配置文件设置的证书目录、私钥目录、数据目录、日志目录,将上面生成的证书和私钥放入对应目录内;
- ./install.sh检测并运行本地私有仓库,过程中会下载harbor、nginx、redis等镜像组件,成功后会生产docker-compose配置、日志、数据等内容(可以在执行脚本前到install-images-harbor目录安装镜像);
- 关闭后可以通过docker-compose start命令启动。
2.5.6 管理本地仓库
- https://192.168.43.101访问管理界面,通过用户名(admin)和密码(11111111)登录本地仓库。
- 在C:\Windows\System32\drivers\etc\hosts文件中添加域名解析,https://hub.docker-local.com/访问管理界面,通过用户名(admin)和密码(11111111)登录本地仓库。
2.5.7 使用本地仓库
- docker login https://hub.docker-local.com 在Master和Worker节点测试本地镜像仓库;
- docker tag nginx:latest hub.docker-local.com/library/nginx:v1按仓库要求标记镜像;
- docker push hub.docker-local.com/library/nginx:v1镜像推送到本地镜像仓库;
- docker pull hub.docker-local.com/library/nginx:v1从本地镜像仓库下载镜像。
本文含有隐藏内容,请 开通VIP 后查看