Kubernetes 集群安装

990 阅读1分钟

Kubernetes 集群安装

Kuberbetes 集群规划

节点 处理器 内存
k8s-master01 1/2 2G
k8s-node1 2/2 4G
k8s-node2 2/2 4G
k8s-集群规划
k8s-集群规划

Kuberbetes 环境准备

k8s-master01k8s-node01k8s-node02所有节点安装

1、设置系统主机名以及 Host 文件的相互解析

vim /etc/hosts

192.168.200.61 k8s-master01 m1
192.168.200.71 k8s-node01 n1
192.168.200.72 k8s-node02 n2

2、关闭防火墙,SELinux

systemctl stop firewalld   
systemctl disable firewalld     

setenforce 0   
sed -i 's/\(SELINUX=\).*/\1disabled/' /etc/selinux/config

3、调整系统的时区

#设置系统时区为中国/上海
timedatectl set-timezone Asia/Shanghai
#将当前的UTC时间写入硬件时钟
timedatectl set-local-rtc 0
#重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond

4、关闭系统不需要服务

systemctl stop postfix && systemctl disable postfix

5、关闭虚拟内存空间

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

因为开启虚拟内存空间,k8s就可能运行在虚拟内存空间中,大大影响k8s效率,建议关闭

6、配置yum源,可以用阿里云

CentOS 7- 配置阿里镜像源[1]

7、升级系统内核为 4.44

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

yum --enablerepo=elrepo-kernel install -y kernel-lt
grub2-set-default 'CentOS Linux (4.4.238-1.el7.elrepo.x86_64) 7 (Core)'
grub2-editenv list

不升级为4.4,并不会造成k8s安装失败,但是会造成一些不稳定因素。

8、调整内核参数,对于 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 空间,只有当系统 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
cp kubernetes.conf  /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

9、安装依赖包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wgetvimnet-tools git

10、设置 rsyslogd 和 systemd journald

mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d
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

Kuberbetes 部署安装

1、kube-proxy开启ipvs的前置条件

ipvs:解决svc(service)和pod之间的调度关系,极大增加效率。

modprobe br_netfilter

cat > /etc/sysconfig/modules/ipvs.modules <<EOF 
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

2、安装docker

# 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

yum update -y && yum install -y docker-ce-18.06.3.ce-3.el7

# 创建 /etc/docker 目录

mkdir /etc/docker

# 配置 daemon.

cat >/etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://suiet3wl.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"], 
  "log-driver": "json-file", 
  "log-opts": { 
        "max-size": "100m" 
    }
}
EOF

# 存放docker的配置文件
mkdir -p /etc/systemd/system/docker.service.d

# 重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

3、安装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/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 指定安装版本(这里统一使用1.15.1)
yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
systemctl enable kubelet.service

4、初始化Kubermetes 节点

直接kubeadm init ,会因为网络原因在这里卡很久。可以预先拉取配置。

预先配置拉取镜像
预先配置拉取镜像

kubeadm-basic.images.tar.gz:公众号:云计算小千 回复:k8s安装

# 解压
tar -zxvf kubeadm-basic.images.tar.gz

写个简单shell脚本导入镜像k8s-load.sh

#!/bin/bash
ls /root/kubeadm-basic.images >/tmp/image-list.txt
cd /root/kubeadm-basic.images

for i in $(cat /tmp/image-list.txt)
do
 docker load -i $i
done

rm -fr /tmp/image-list.txt
# 生成kubeadm的默认配置文件
kubeadm config print init-defaults > kubeadm-config.yaml 
vim kubeadm-config.yaml

localAPIEndpoint:        
 advertiseAddress: 192.168.200.61 
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

kubeadm-init.log文件保存好

使用kubectl工具

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

5、部署网络

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

确保网络好,能够访问到quay.io这个registery。否则进行下面操作

# 可能存在网络原因,可以先wget下来
wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

kubectl create -f kube-flannel.yml

6、node加入master节点

kubeadm join 192.168.200.61:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:3a6ea23cd5ea4571b768b65819b4a5df59d8d7286c21c67e4b65353e6ebd5cc9 

执行在kubeadm init输出的kubeadm join命令

所有节点加入完成

[root@k8s-master01 ~]# kubectl get node
NAME           STATUS   ROLES    AGE     VERSION
k8s-master01   Ready    master   25m     v1.15.1
k8s-node1      Ready    <none>   3m14s   v1.15.1
k8s-node2      Ready    <none>   3m22s   v1.15.1

到这里,Kuberbetes集群安装基本完成!高可用的集群在后续介绍。

Reference

[1]

CentOS 7- 配置阿里镜像源: https://developer.aliyun.com/article/704987

本文使用 mdnice 排版