K8S安装
需要注意的是如果没有特殊说明,各个节点都需要步骤操作
环境准备
1.配置主机名
hostnamectl set-hostname master # master节点
hostnamectl set-hostname node1 # node1节点
hostnamectl set-hostname node2 # node2节点
2.配置hosts文件
每个节点配置相同
vim /etc/hosts
10.0.0.138 master m
10.0.0.143 node1 n1
10.0.0.139 node2 n2
3.安装依赖包
yum install -y conntrack ntpdate ntp ipvsadm ipset iptables curl sysstat libseccomp wget vim net-tools git
4.清空防火墙和SELinux
systemctl stop firewalld && systemctl disable firewalld # 关闭firewalld防火墙
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save # 安装iptables并清空规则
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config # 关闭SELinux
5.关闭交换分区
防止容器运行在swap空间里
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
free -h # 查看swap分区是否关闭成功
6.调整内核参数
# 开机会调用
cat > /etc/sysctl.d/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
net.ipv6.conf.all.disable_ipv6=1 # 关闭ipv6的协议
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 OOM
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
sysctl -p /etc/sysctl.d/kubernetes.conf # 刷新规则
7.调整系统时区
在分布式领域里,一定要统一时间,否则会出现问题
timedatectl set-timezone Asia/Shanghai # 中国上海,在C7里这是修改时区的标准方式
timedatectl set-local-rtc 0 # 将当前的UTC时间写入硬件时钟
/sbin/ntpdate -u ntp1.aliyun.com # 将时间同步写入定时任务
# 重启依赖于系统时间的服务
systemctl restart rsyslog && systemctl restart crond
8.关闭不需要的服务
systemctl stop postfix && systemctl disable postfix
9.设置 systemd journald
mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d # 创建journal的配置文件存放目录
# 生成journal配置文件
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盘
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 # 重启journal日志服务
10.升级系统内核为 4.44
# CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,查看内核命令uname -r,升级步骤如下:
方式一:
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.182-1.el7.elrepo.x86_64) 7 (Core)" #设 置开机从新内核启动
reboot # 重启
uname -r # 查看内核变化啦
11.安装docker
- 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
- 配置阿里的docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安裝指定的docker版本
yum install -y docker-ce # 不指定版本,默认安装最新版
- 镜像加速、日志设置、私有仓库-
mkdir /etc/docker # 创建/etc/docker目录
# 设置一下daemon中cgroup为syetemd 默认有两个cgroup 存储文件格式为json-flle,大小为100Mb
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"insecure-registries": ["10.0.0.136:9090"]
}
EOF
- 重启docker服务
systemctl daemon-reload # 重新加载docker
systemctl restart docker # 重启docker
systemctl enable docker # 设置开机自启
12.配置IPVS
ipvs是开启kube-proxy的前置条件
kube-prxy实现负载均衡
k8s在1.14版本以后,默认使用ipvs作为调度器
modprobe br_netfilter # 加载netfilter模块
# 生成ipvs模块文件
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 # 执行ipvs.modules,并且查看执行结果
部署Kubernetes
1.配置K8S的yum源
# 配置K8S的yum源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[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/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2.安装Kueradm、Kuberctl、Kuberlet
yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
systemctl enable kubelet.service # K8S中首先启动的服务,所有组件中只要kuberlet是以进程的方式启动,其他都是容器化启动,将其他的组件拉起来
# kuberadm 自动化安装工具
# kuberctl 命令行工具
# kuberlet node节点和master的API交互
3.设置Master节点(主节点操作)
kubeadm config print init-defaults > kubeadm-config.yaml # 打印初始化模板文件
vim kubeadm-config.yaml # 需要修改的内容
advertiseAddress: 10.0.0.138 # 这个IP修改为master节点IP
kubernetesVersion: v1.15.1 # 指定安装的K8s的版本
dnsDomain: cluster.local # 指定集群的域名
serviceSubnet: 10.96.0.0/12 # 暴露给用户的网段
podSubnet: 10.244.0.0/16 # 给pod分配的地址段
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1 # 调度方式修改为ipvs的方式,增加内容
kind: KubeProxyConfiguration
featureGates:
SupportIPVSProxyMode: true
mode: ipvs
4.将其他组件的镜像导入系统
直接下载的话不能直接访问谷歌的云服务器,需要提前下载
kuberadm软件包导入,其中有其他核心组件的镜像
docker load < 其他组件镜像
5.集群初始化(主节点操作)
# 需要注意,CPU的核心要大,内存空间要大
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
#注意事项:生成的token需要保留下来,用于子节点添加的凭证,建立一个文件保存起来
#例如:kubeadm join 10.0.0.138:6443 --token 5pwx77.ahs98fxdfpdwpjf1 --discovery-token-ca-cert-hash sha256:d81f347530ad3e1b03cfdf53666a20b62ab09f1ce3d3ccf2a437ee33805f5183
6.配置环境变量(主节点操作)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
7.子节点加入(子节点操作)
kubeadm join 10.0.0.138:6443 --token 5pwx77.ahs98fxdfpdwpjf1 --discovery-token-ca-cert-hash sha256:d81f347530ad3e1b03cfdf53666a20b62ab09f1ce3d3ccf2a437ee33805f5183
# 各个节点加入集群,这个命令是在master节点初始化的时候生成的
8.配置flannel网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
cd flannel && ls
flannel.tar kube-flannel.yml
dicker load < flannel.tar # 将镜像导入
9.启动k8s(主节点操作)
kuberctl create -f kube-flannel.yml # 创建flannel的联系方式
kubectl get pod -n kube-system # 指定kube-system名称空间
9.查看各节点状态(主节点操作)
# 查看所有节点是否是Ready状态
kubectl get nodes #查看节点信息
NAME STATUS ROLES AGE VERSION
master Ready master 5h1m v1.15.1
node1 Ready <none> 4h52m v1.15.1
node2 Ready <none> 4h52m v1.15.1