Kubernetes集群搭建Kubeadm(二)

前言

上篇把三个节点(一个Master节点和两个Node节点)互相ping通了,也能访问网络了,现在继续搭建,并使用kubeadm搭建主节点

 

集群搭建

1、看看我们三个节点的IP

 2、设置镜像源,使用aliyun的镜像源,并安装依赖包(以下命令都需要在3个节点执行)

yum -y install wget                                                                # 安装wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo                        # 使用阿里云镜像
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables cur sysstat libseccomp wget vim net-tools git               # 安装依赖包

 3、关闭防火墙,并为Iptables设置空规则

因为我们不需要用到,就自己使用,而且防火墙可能会阻止docker

# 关闭防火墙并设置不再自启
systemctl stop firewalld && systemctl disable firewalld      
# 配置iptables规则
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

 4、关闭SELINUX

主要是k8s会去检测swap分区,可能导致pod在虚拟内存运行,降低工作效率

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

 5、调整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  # 关闭ipv6
net.netfiler.nf_conntrack_max=2310720
EOF
# 将Kubernete.conf 复制到/etc/sysctl.d目录下 cp kubernetes.conf
/etc/sysctl.d/kubernetes.conf sysctl -p /etc/sysctl.d/kubernetes.conf

  提示没有文件或目录,不用管他,后面centos内核到4.4就好了

6、关闭系统不需要的服务

systemctl stop postfix && systemctl disable postfix

 7、设置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

  8、升级系统内核为4.4

因为CentOS7 版本中自带3.*内核存在一些bugs,会导致运行的docker、Kubernetes不稳定

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.241-1.el7.elrepo.x86_64) 7 (Core)"

# 重启
reboot

  重启完使用uname -r 去检测,就可以看到自动启用了4.4内核的版本 

9、配置kube-proxy开启ipvs,用于解决svc和pod的调度关系,增加访问效率

modprobe br_netfilter

# 以下内容写到ipvs.modules中
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 给权限
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

10、安装Docker

# yum 安装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

# 重启
reboot

# 此处需要重启配置启动Centos7系统的4.4内核,因为失效了,需要重新配置一次,以后就不会了
grub2-set-default "CentOS Linux (4.4.241-1.el7.elrepo.x86_64) 7 (Core)"

# 启动dokcer
systemctl start docker && systemctl enable docker

## 创建 /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

# 创建目录,存放docker的配置文件
mkdir -p /etc/systemd/system/docker.service.d

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

 安装260m左右,还是挺大的,安装后等重启,重启配置一下内核启动,接着配置daemon.json文件,并设置docker开机自启等工作。

 

  11、安装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

# 安装kubeadm
yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1

# 设置开机自启
systemctl enable kubelet.service

  安装完后设置kubelet.service开机自启

12、使用kubeadm安装包安装

由于kubeadm init需要的镜像很多,所以先拿别人下载好的镜像包来玩,少踩点坑,用的是1.15.1,后面再去搞搞最新的,我放百度云了

链接:https://pan.baidu.com/s/1pnphP8JA7mWx693-Mw9G7w
提取码:esh8 

安装拖曳文件的命令

yum -y install lrzsz

将文件拖入到/root/路径下

# 解压
tar -zxvf  kubeadm-basic.images.tar.gz
# 查看文件
ls

  解压出来的文件还需要在解压,而且其他节点也需要用到,就写个脚本load-images.sh执行

vi load-images.sh

#!/bin/bash

# 查询kubeadm-basic.images文件夹下的文件,并写入到临时文件里面
ls /root/kubeadm-basic.images > /tmp/image-list.txt

cd /root/kubeadm-basic.images

# 遍历kubeadm-basic.images下的文件,并解压
for i in $( cat /tmp/image-list.txt )
do
    docker load -i $i
done

# 删除临时文件
rm -rf /tmp/image-list.txt
# 并赋予权限 
chmod a+x load-images.sh

# 执行脚本
./load-images.sh

  其他两个node节点也要哦,可以把kubeadm-basic.images文件夹和load-images.sh文件copy过去,并执行./load-images.sh命令

scp -r kubeadm-basic.images load-images.sh root@k8s-node01:/root/

scp -r kubeadm-basic.images load-images.sh root@k8s-node02:/root/

# 并分别在node01和node02节点上执行命令
./load-images.sh

 13、初始化主节点(这一步只需要在Master上操作)

# 打印初始化信息到kubeadm-config.yaml 需要修改里面的配置信息
kubeadm config print init-defaults > kubeadm-config.yaml

# 查看文件
ls

# 编辑改文件,需要改ip等信息
vim kubeadm-config.yaml

 

[root@k8s-master01 ~]# cat kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.81.110
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master01
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.15.1
networking:
  dnsDomain: cluster.local
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
  SupportIPVSProxyMode: true
mode: ipvs

 

如上图,改了这几处,ip就选自己的,其他不变

切记,这里需要配置了/etc/hosts 文件,不然会失败的

# 开始初始化主节点,并加执行产生的日志写入到kubeadm-init.log中,需要用到的
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log

# 查看日志
cat kubeadm-init.log

 

 加入主节点以及其他节点

# 执行安装日志中的加入命令即可。
mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

将我们的kubeadm-init.log kubeadm-config.yaml 文件放置到别的路径下,不要放在root上,以防被删除,并创建flannel目录,用来部署网络

mkdir install-k8s

mv kubeadm-init.log kubeadm-config.yaml install-k8s/

cd install-k8s

mkdir core

mv * core/

mkdir plugin

cd plugin/

mkdir flannel

cd flannel/

14、部署网络,使用flannel

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

  创建kube-flannel(这里有个坑,查看kube-flannel.yml后会发现有个quay.io域名下的镜像,如果不能访问国外网络是无法使用的,因为我这边能访问,所以执行成功,看到网上执行失败的是改了别人的镜像操作的)

kubectl create -f kube-flannel.yml

 

# 查看pod状态
kubectl get pod -n kube-system -o wide

kube-flannel下的Pod就运行起来了,不然会出现Init(0/1)的状态

 

 因此,我们的Master节点就部署完成了,接下来就是让我们的Node节点加入到Master节点上,刚才查看的kubeadm-init.log,最后一句命令就是使Node节点加入Master集群中

 在Node节点上分别执行

kubeadm join 192.168.81.110:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:dfc8c90375edce13d20fe81f3d78380940f6a6d2356b05729d13c163c4b72b3f
# Node节点加入之后,继续查看pod状态
kubectl get pod -n kube-system -o wide

 Node节点已经就加入啦,这样,我们的集群就ok了

 15、使用Kubectl Deployment来运行一个Pod

# 创建3个副本
kubect run nginx-deployment --image=nginx:latest --port=80 --replicas=3

# 查看deployment状态
kubectl get deployment

# 查看rs
kubectl get rs

# 查看pod,会发现运行在了不同的节点上啦
kubect get pod -o wide

 

总结

本篇挺长的,也顺利运行起来了,下篇讲讲私有仓库搭建。

 

 

 

posted @ 2020-11-07 11:21  为之守望  阅读(346)  评论(0编辑  收藏  举报