- 项目摘要:
本内容是一个主节点,两个从节点的k8s环境。非高可用环境。是一个简易的入门案例。
前期准备:需要三台centos服务器,本文是基于centos7。如果安装Harbor,需要四台centos服务器。
本文档内容庞杂,可能会有少部分不全或者不正确,但是都是可以通过百度修正的。同时,后期也会不断的修正。
- 项目具体实施:
- 前期准备(每台机器都需要执行)
- 配置host文件
192.168.1.1 k8s-master
192.168.1.2 k8s-node01
192.168.1.3 k8s-node02
- 安装环境
安装依赖包
#yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
设置防火墙为IPtables并设置空规则
#systemctl stop firewalld && systemctl disable firewalld
# yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
关闭selinux
# swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/ ' /etc/selinux/config
# 调整内核参数,对于k8s [这里报错不用管它]
cat > kubernetes.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 #禁止使用 swap空间,只有当系统00M时才允许使用它
vm.overcommit_memory=1 #不检查物理内存是否够用
vm.panic_on_oom=0 #开启00M
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max= 2310720
EOF
# cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
# sysctl -p /etc/sysctl.d/kubernetes.conf
同步时间
# ntpdate -u cn.pool.ntp.org
关闭不需要的服务
# systemctl stop postfix && systemctl disable postfix
设置rsyslogd和systemd journald
# mkdir /var/log/journal #持久化保存日志的目录
# mkdir /etc/systemd/journald.conf.d
# cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journa1l]
#持久化保存到磁盘
Storage=persistent
#压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
#最大占用空间10G
SystemMaxUse=10G
#单日志文件最大200M
SystemMaxFileSize=200M
#日志保存时间2周
MaxRetentionSec=2week
#不将日志转发到syslog
ForwardToSyslog=no
EOF
# systemctl restart systemd-journald
升级系统内核为4.44
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
安装完成后检查/boot/grub2/grub.cfg中对应内核menuentry 中是否包含initrd16 配置,如果没有,再安装一次!
# yum --enablerepo=elrepo-kernel install -y kernel-lt
设置开机从新内核启动
# grub2-set-default 'CentOS Linux (4.4.189-1.el7. elrepo.x86_64) 7 (Core)'
# reboot
# uname -r
- 搭建k8s(每台机器都需要执行,除3部分内容)
- kube-proxy 开启ipvs的前置条件。
modprobe br_netfilter
#cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
- 安装Docker软件,每台机器都执行。
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum update -y && yum install -y docker-ce
创建/etc/docker 目录
#mkdir /etc/docker
配置daemon
# cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver":"json-file",
"log-opts":{
"max-size": "100m"
}
}
EOF
# mkdir -p /etc/systemd/system/docker.service.d
重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
(或者按如下教程: 安装docker教程)
- 安装Kubeadm(主从配置)
#cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yumdoc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
# systemctl enable kubelet.service
初始化主节点(在主节点机器操作)
#kubeadm config print init-defaults > kubeadm-config.yaml
对照修改如下内容
localAPIEndpoint:
advertiseAddress: 【主节点ip地址】
kubernetesVersion: v1.15.1
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: 10.96.0.0/12
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates :
SupportIPVSProxyMode: true
mode : ipvs
# kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
随后执行日志中要求的命令,并且加入主节点以及其余工作节点
部署网络:
# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# kubectl create -f kube-flannel.yml
或者
#kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# kubectl get pod -n kube-system
- 至此,环境搭建完成。
- 附:安装Harbor私有仓库 (之后springboot将直接制作镜像到该服务器)
机器: 192.168.1.4
- 安装docker(略)
- 安装docker-componse
# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# docker-compose --version
docker-compose version 1.24.1, build 1110ad01
- 制作证书(以下示例ip全改成自己的)
在尝试http的时候,会遇到让配置--insecure-registry serverIP,但是总是报错,所以这里直接采用证书的方式,通过https访问。
创建目录存放位置
# mkdir /root/ca -p
# cd /root/ca
以下命令创建CA证书
# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
其中:(req:申请证书签署请求;-newkey 新密钥 ;-x509:可以用来显示证书的内容,转换其格式,给CSR签名等X.509证书的管理工作,这里用来自签名。)
一路回车出现Common Name 输入IP或域名,示例:
Common Name (eg, your name or your server's hostname) []:192.168.1.4
生成证书签名请求
# openssl req -newkey rsa:4096 -nodes -sha256 -keyout 192.168.1.4.key -out 192.168.1.4.csr
一路回车出现Common Name 输入IP或域名,示例:
Common Name (eg, your name or your server's hostname) []:192.168.1.4
生成证书
备注:若需要添加多个地址(允许链接的ip等)
# echo subjectAltName = IP:192.168.1.4 > extfile.cnf
# openssl x509 -req -days 365 -in 192.168.1.4.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out 192.168.1.4.crt
- 安装Harbor
# cd /usr/local
下载离线安装包
# wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz
解压文件
# tar xvf harbor-offline-installer-v1.8.0.tgz
进入Harbor目录
# cd harbor
配置harbor.yml
# vim harbor.yml
配置如下
hostname: 192.168.1.4
https:
port: 443
certificate: /root/ca/192.168.1.4.crt
private_key: /root/ca/192.168.1.4.key
harbor_admin_password: 123456
data_volume: /usr/local/harbor/data
location: /var/log/harbor
- 运行脚本进行安装
# ./install.sh
- 访问测试
浏览器输入:https://192.168.1.4,用户名: admin 密码:123456
- 配置当前主机docker的daemon.json文件
指定镜像仓库地址
# vim /etc/docker/daemon.json
添加如下内容:
#vim /etc/docker/daemon.json
{
"insecure-registries": ["https://192.168.1.4"]
}
- 在当前主机尝试docker登录
docker login 192.168.1.4
用户名: admin 密码:123456
- 上传镜像进行上传测试
a、下载测试镜像
#docker pull hello-world
b、给镜像重新打标签(它需要去前端查看生成规则,否则会push失败)
#docker tag hello-world:latest 192.168.1.4/library/hello-world:v1
d、登录docker服务器
#docker login 192.168.1.4
f、上传镜像
docker push 192.168.1.4/library/hello-world:v1
- 其它 Docker客户端下载测试
a、指定镜像仓库地址
# vim /etc/docker/daemon.json
{
"insecure-registries": ["https://192.168.1.4"]
}
b、下载测试镜像
# docker pull 192.168.1.4/library/hello-world:v1
- 添加CA证书实现免密登录(在客户机或者当前主机都可以)
# mkdir -p /etc/docker/certs.d/192.168.1.4
# cp ca.crt /etc/docker/certs.d/192.168.1.4/ca.crt
# systemc restart docker.service
相关材料下载(本材料包含和本页内容一致的文档、三份k8s讲义,一套kubernetes培训文档,共大约20个文档):
https://download.csdn.net/download/qq_25337221/12499378
- 参考链接:
- 参阅培训教程
- 安装harbor: https://learnku.com/articles/29884
- 配置CA证书: https://www.cnblogs.com/Dev0ps/p/10566398.html
本内容由安康学院“雨季”原创。