ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

kubernetes集群系列资料03--K8S集群部署

2021-06-17 22:33:20  阅读:112  来源: 互联网

标签:iptables 03 kubernetes 192.168 etc 集群 yum kubeadm


一、K8S-master安装步骤

1、创建centos7虚拟机;
2、安装centos7系统;
3、设置系统IP、网关、DNS等;

BOOTPROTO=none
IPADDR=192.168.66.10
PREFIX=24
GATEWAY=192.168.66.1
DNS1=192.168.66.1

4、xshell连接K8S-master主机,进行集群部署。

hostnamectl set-hostname k8s-master01
echo '
192.168.66.10   k8s-master01
192.168.66.20   k8s-node01
192.168.66.21   k8s-node02
192.168.66.100   hub.atguigu.com
' >>/etc/hosts
hostname;cat /etc/hosts

yum -y install 
conntrack-tools ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim-enhanced net-tools git
yum list conntrack-tools ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim-enhanced 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
systemctl status firewalld;systemctl status iptables

##关闭selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled' /etc/selinux/config
getenforce;grep -Ev '^#|^$' /etc/selinux/config

##关闭虚拟内存,目的:使用kubeadm安装K8S集群时会检测swap是否关闭;如果虚拟内存开启,pod就可能会放在虚拟内存中运行,会大大降低工作效率;生产环境中,K8S集群也要求关闭虚拟内存。
swapoff -a && sed -i '/ swap /s/^\(.*\)$/#\1/g' /etc/fstab   #/ swap /^\(.*\)$表示匹配到swap这行的首尾为任何字符的所有内容。#\1表示在该行的第一个1位置添加#;

##调整内核参数,除前3条外其他为优化项。
cat > /etc/sysctl.d/kubernetes.conf <<eof
net.bridge.bridge-nf-call-iptables=1    #前2条为开启网桥模式,必做,否则安装K8S会报错。
net.bridge.bridge-nf-call-ip6tables=1   #前2条为开启网桥模式,必做,否则安装K8S会报错。
net.ipv6.conf.all.disable_ipv6=1        #关闭IPv6,必做,否则安装K8S会报错。
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.netfilter.nf_conntrack_max=2310720
eof
modprobe br_netfilter;ls /proc/sys/net/bridge  #加载模块,使得/proc/sys/net/bridge/bridge-nf-call-iptables、/proc/sys/net/bridge/bridge-nf-call-ip6tables文件存在:
sysctl -p /etc/sysctl.d/kubernetes.conf

##设置系统时区
timedatectl set-timezone Asia/Shanghai
timedatectl set-local-rtc 0 #将当前UTC时间写入硬件时钟;

##重启依赖时间的服务
systemctl restart rsyslog
systemctl restart crond

##关闭系统不需要的服务
systemctl stop postfix && systemctl disable postfix
systemctl status postfix

##设置系统日志;centos7默认使用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 status rsyslog.service
systemctl restart systemd-journald.service

rpm -Uvh http://mirror.rackspace.com/elrepo/elrepo/el7/x86_64/RPMS/elrepo-release-7.0-4.el7.elrepo.noarch.rpm #安装内核4.X版本的repo源;
yum --enablerepo=elrepo-kernel install -y kernel-lt #默认安装最新版内核(kernel-lt-5.4.123-1.el7.elrepo.x86_64);#若需安装4.44的lt版本,需指定内核参数;但repo源没有;如何安装4.4.189-1.el7.elrepo.x86_64???
grub2-set-default 'CentOs Linux(kernel-lt-5.4.123-1.el7.elrepo.x86_64) 7 (Core)'  #设置开机从新内核启动;
reboot      #重启后使内核生效;
uname -a    #查看内核是否生效;
##kube-proxy开启ipvs的前置条件;kube-proxy主要解决SVC与POD之间的调度关系,LVS可以提高其工作效率,故应开启ipvs变更为LVS调度方式。
modprobe br_netfilter
lsmod |grep 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 -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
yum list docker-ce

mkdir /etc/docker
##native.cgroupdriver=systemd表示交由systemd进行cgroup执行隔离;日志修改为json-file存储类型,大小为100M;
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
systemctl daemon-reload && systemctl start docker && systemctl enable docker
systemctl status 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/yum/doc/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
yum list kubeadm kubectl kubelet
systemctl enable kubelet.service

##初始化主节点前需导入docker镜像,一般从谷歌网站拉取,但可从本地上传kubeadm-basic.images.tar.gz以加快安装。
# ~~~将上传镜像压缩包至root目录
tar -xzvf kubeadm-basic.images.tar.gz
ls /root/kubeadm-basic.images > /tmp/image-list.txt
cd kubeadm-basic.images
##导入使用 docker save 命令导出的镜像*.tar文件。
for i in $(cat /tmp/image-list.txt)
do
    docker load -i $i
done
rm -f /tmp/image-list.txt
docker images               #查看7个组件的镜像是否上传。

##初始化主节点
cd
kubeadm config print init-defaults > kubeadm-config.yaml  #将kubeadm的默认配置重定向至kubeadm-config.yaml;
vim kubeadm-config.yaml  #修改文件内容
~~~~~~~~~
advertiseAddress: 192.168.66.11   #修改为当前节点的IP;
...
kubernetesVersion: v1.15.1        #修改为安装的K8S版本。
...
networking:
   dnsDomain: cluster.local       #默认即可
   serviceSubnet: 10.96.0.0/12    #默认即可
   podSubnet: 10.244.0.0/16       #新增项目;安装flannel实现覆盖型网络,其默认网段为10.244.0.0/16;如果本处不一致时后期需要进配置修改。
...
###在文件尾添加如下内容,用以修改KubeProxy的调度方式为ipvs;
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
   SupportIPVSProxyMode: true
mode: ipvs
~~~~~~~~~

kubeadm init --config=kubeadm-config.yaml --upload-certs |tee kubeadm-init.log  #高可用模式才需执行;以kubeadm-config.yaml模板进行初始化安装,该命令只有kubeadm1.13版后才有;

##加入主节点及其他工作节点(主机点初始化成功后,按照安装日志后的命令执行)
mkdir -p $HOME/.kube  #.kube目录是用于存放kubectl与K8S集群交互的缓存文件及相关配置文件;
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 于是可以使用kubectl工具了
kubectl get node #查询K8S集群有哪些node;由于采用扁平化网络,且未安装flannel插件,故status为NotReady;
kubectl get pod -n kube-system  #所有组件安装在kube-system的名称空间下,若不指定名称空间,则会显示default名称空间下的组件;

##部署网络flannel
mkdir install-k8s;mv kubeadm-init.log kubeadm-config.yaml ./install-k8s/
cd install-k8s;mkdir core;mv * core
mkdir -p plugin/flannel/;cd plugin/flannel/
~~~下载kube-flannel.yml;
kubectl apply -f kube-flannel.yml
kubectl get node  #查询K8S集群有哪些node,状态已变为Ready;
kubectl get pod -n kube-system
ifconfig


##在工作节点,以root用户将工作节点加入集群后,可在master节点查询节点是否纳入管理;
kubectl get node  #查询K8S集群,可看到工作节点纳入集群,状态已变为Ready;但ROLES缺失。
kubectl get pod -n kube-system -o wide #查看名称空间kube-system下pod的详细信息;

###设置私有仓库域名没有购买的证书,故应设置insecure-registries表示该仓库是安全的。
vi /etc/docker/daemon.json
~~~~~~~~~
{
    "exec-opts":["native.cgroupdriver=systemd"],
    "log-driver":"json-file",
    "log-opts":{
        "max-size":"100m"
    },
    "insecure-registries": ["https://hub.atguigu.com"]
}
~~~~~~~~~
systemctl restart docker

二、K8S-node01安装步骤

1、创建centos7虚拟机;
2、安装centos7系统;
3、设置系统IP、网关、DNS等,;

BOOTPROTO=none
IPADDR=192.168.66.20
PREFIX=24
GATEWAY=192.168.66.1
DNS1=192.168.66.1

4、xshell连接K8S-node01主机,进行集群部署。

  

hostnamectl set-hostname k8s-node01
echo '
192.168.66.10   k8s-master01
192.168.66.20   k8s-node01
192.168.66.21   k8s-node02
192.168.66.100   hub.atguigu.com
' >>/etc/hosts
hostname;cat /etc/hosts

yum -y install 
conntrack-tools ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim-enhanced net-tools git
yum list conntrack-tools ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim-enhanced 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
systemctl status firewalld;systemctl status iptables

##关闭selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled' /etc/selinux/config
getenforce;grep -Ev '^#|^$' /etc/selinux/config

##关闭虚拟内存,目的:使用kubeadm安装K8S集群时会检测swap是否关闭;如果虚拟内存开启,pod就可能会放在虚拟内存中运行,会大大降低工作效率;生产环境中,K8S集群也要求关闭虚拟内存。
swapoff -a && sed -i '/ swap /s/^\(.*\)$/#\1/g' /etc/fstab   #/ swap /^\(.*\)$表示匹配到swap这行的首尾为任何字符的所有内容。#\1表示在该行的第一个1位置添加#;

##调整内核参数,除前3条外其他为优化项。
cat > /etc/sysctl.d/kubernetes.conf <<eof
net.bridge.bridge-nf-call-iptables=1    #前2条为开启网桥模式,必做,否则安装K8S会报错。
net.bridge.bridge-nf-call-ip6tables=1   #前2条为开启网桥模式,必做,否则安装K8S会报错。
net.ipv6.conf.all.disable_ipv6=1        #关闭IPv6,必做,否则安装K8S会报错。
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.netfilter.nf_conntrack_max=2310720
eof
modprobe br_netfilter;ls /proc/sys/net/bridge  #加载模块,使得/proc/sys/net/bridge/bridge-nf-call-iptables、/proc/sys/net/bridge/bridge-nf-call-ip6tables文件存在:
sysctl -p /etc/sysctl.d/kubernetes.conf

##设置系统时区
timedatectl set-timezone Asia/Shanghai
timedatectl set-local-rtc 0 #将当前UTC时间写入硬件时钟;

##重启依赖时间的服务
systemctl restart rsyslog
systemctl restart crond

##关闭系统不需要的服务
systemctl stop postfix && systemctl disable postfix
systemctl status postfix

##设置系统日志;centos7默认使用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 status rsyslog.service
systemctl restart systemd-journald.service

##升级系统内核为4.44;centos7.x系统自带的3.10.x内核存在一些bugs,导致运行的docker、ks运行不稳定。
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org #导入公钥;
# yum -y install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm #安装内核的repo源;
rpm -Uvh http://mirror.rackspace.com/elrepo/elrepo/el7/x86_64/RPMS/elrepo-release-7.0-4.el7.elrepo.noarch.rpm #安装内核4.X版本的repo源;
# yum list available | grep kernel-lt #查看可以使用的内核版本;默认只有最新版本;
# yum list --showduplicates kernel #查看可以使用的内核版本;默认只有最新版本;
yum --enablerepo=elrepo-kernel install -y kernel-lt #默认安装最新版内核(kernel-lt-5.4.123-1.el7.elrepo.x86_64);#若需安装4.44的lt版本,需指定内核参数;但repo源没有;如何安装4.4.189-1.el7.elrepo.x86_64???
grub2-set-default 'CentOs Linux(kernel-lt-5.4.124-1.el7.elrepo.x86_64) 7 (Core)'  #设置开机从新内核启动;
reboot      #重启后使内核生效;
uname -a    #查看内核是否生效;
# yum -y update #更新全部软件版本;不做会引起K8S集群不稳定工作。更新引起冲突??如何解决???
# yum -y update --skip-broken #可不升级
# grub2-set-default 'CentOs Linux(kernel-lt-5.4.123-1.el7.elrepo.x86_64) 7 (Core)'  #更新后必须再次设置开机从新内核启动;
# reboot      #重启后使内核生效;
# uname -a    #查看内核是否生效;

##kube-proxy开启ipvs的前置条件;kube-proxy主要解决SVC与POD之间的调度关系,LVS可以提高其工作效率,故应开启ipvs变更为LVS调度方式。
modprobe br_netfilter
lsmod |grep 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 -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list --showduplicates docker-ce #查看可用版本;内容未:docker-ce.x86_64   18.06.3.ce-3.el7 
yum -y install docker-ce-18.06.3.ce-3.el7 #安装指定版本docke;
# yum -y install docker-ce.x86_64 #默认安装最新版本
yum list docker-ce
mkdir /etc/docker
##native.cgroupdriver=systemd表示交由systemd进行cgroup执行隔离;日志修改为json-file存储类型,大小为100M;
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
systemctl daemon-reload && systemctl start docker && systemctl enable docker
systemctl status 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/yum/doc/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
yum list kubeadm kubectl kubelet
systemctl enable kubelet.service   #kubelet用于与docker交互,必须设置未开机自启;

##初始化主节点前需导入docker镜像,一般从谷歌网站拉取,但可从本地上传kubeadm-basic.images.tar.gz以加快安装。
# ~~~将上传镜像压缩包至root目录
tar -xzvf kubeadm-basic.images.tar.gz
ls /root/kubeadm-basic.images > /tmp/image-list.txt
cd kubeadm-basic.images
##导入使用 docker save 命令导出的镜像*.tar文件。
for i in $(cat /tmp/image-list.txt)
do
    docker load -i $i
done
rm -f /tmp/image-list.txt
docker images               #查看7个组件的镜像是否上传。

##以root用户将工作节点加入集群,每次初始化成功后,token会变化。
kubeadm join 192.168.66.10:6443 --token 5r2tqs.x6vyjl079hp8xmmw \
    --discovery-token-ca-cert-hash sha256:321478ffaa9815b6c3b8272e50111e81a8b16892f3e71143b739558d244066cb

###设置私有仓库域名没有购买的证书,故应设置insecure-registries表示该仓库是安全的。
vi /etc/docker/daemon.json
~~~~~~~~~
{
    "exec-opts":["native.cgroupdriver=systemd"],
    "log-driver":"json-file",
    "log-opts":{
        "max-size":"100m"
    },
    "insecure-registries": ["https://hub.atguigu.com"]
}
~~~~~~~~~
systemctl restart docker

  

三、K8S-node02安装步骤

1、创建centos7虚拟机;
2、安装centos7系统;
3、设置系统IP、网关、DNS等,;

BOOTPROTO=none
IPADDR=192.168.66.21
PREFIX=24
GATEWAY=192.168.66.1
DNS1=192.168.66.1

4、xshell连接K8S-node02主机,进行集群部署。  

hostnamectl set-hostname k8s-node02
echo '
192.168.66.10   k8s-master01
192.168.66.20   k8s-node01
192.168.66.21   k8s-node02
192.168.66.100   hub.atguigu.com
' >>/etc/hosts
hostname;cat /etc/hosts

yum -y install 
conntrack-tools ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim-enhanced net-tools git
yum list conntrack-tools ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim-enhanced 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
systemctl status firewalld;systemctl status iptables

##关闭selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled' /etc/selinux/config
getenforce;grep -Ev '^#|^$' /etc/selinux/config

##关闭虚拟内存,目的:使用kubeadm安装K8S集群时会检测swap是否关闭;如果虚拟内存开启,pod就可能会放在虚拟内存中运行,会大大降低工作效率;生产环境中,K8S集群也要求关闭虚拟内存。
swapoff -a && sed -i '/ swap /s/^\(.*\)$/#\1/g' /etc/fstab   #/ swap /^\(.*\)$表示匹配到swap这行的首尾为任何字符的所有内容。#\1表示在该行的第一个1位置添加#;

##调整内核参数,除前3条外其他为优化项。
cat > /etc/sysctl.d/kubernetes.conf <<eof
net.bridge.bridge-nf-call-iptables=1    #前2条为开启网桥模式,必做,否则安装K8S会报错。
net.bridge.bridge-nf-call-ip6tables=1   #前2条为开启网桥模式,必做,否则安装K8S会报错。
net.ipv6.conf.all.disable_ipv6=1        #关闭IPv6,必做,否则安装K8S会报错。
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.netfilter.nf_conntrack_max=2310720
eof
modprobe br_netfilter;ls /proc/sys/net/bridge  #加载模块,使得/proc/sys/net/bridge/bridge-nf-call-iptables、/proc/sys/net/bridge/bridge-nf-call-ip6tables文件存在:
sysctl -p /etc/sysctl.d/kubernetes.conf

##设置系统时区
timedatectl set-timezone Asia/Shanghai
timedatectl set-local-rtc 0 #将当前UTC时间写入硬件时钟;

##重启依赖时间的服务
systemctl restart rsyslog
systemctl restart crond

##关闭系统不需要的服务
systemctl stop postfix && systemctl disable postfix
systemctl status postfix

##设置系统日志;centos7默认使用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 status rsyslog.service
systemctl restart systemd-journald.service

##升级系统内核为4.44;centos7.x系统自带的3.10.x内核存在一些bugs,导致运行的docker、ks运行不稳定。
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org #导入公钥;
# yum -y install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm #安装内核的repo源;
rpm -Uvh http://mirror.rackspace.com/elrepo/elrepo/el7/x86_64/RPMS/elrepo-release-7.0-4.el7.elrepo.noarch.rpm #安装内核4.X版本的repo源;
# yum list available | grep kernel-lt #查看可以使用的内核版本;默认只有最新版本;
# yum list --showduplicates kernel #查看可以使用的内核版本;默认只有最新版本;
yum --enablerepo=elrepo-kernel install -y kernel-lt #默认安装最新版内核(kernel-lt-5.4.123-1.el7.elrepo.x86_64);#若需安装4.44的lt版本,需指定内核参数;但repo源没有;如何安装4.4.189-1.el7.elrepo.x86_64???
grub2-set-default 'CentOs Linux(kernel-lt-5.4.123-1.el7.elrepo.x86_64) 7 (Core)'  #设置开机从新内核启动;
reboot      #重启后使内核生效;
uname -a    #查看内核是否生效;
# yum -y update #更新全部软件版本;不做会引起K8S集群不稳定工作。更新引起冲突??如何解决???
# yum -y update --skip-broken #可不升级
# grub2-set-default 'CentOs Linux(kernel-lt-5.4.123-1.el7.elrepo.x86_64) 7 (Core)'  #更新后必须再次设置开机从新内核启动;
# reboot      #重启后使内核生效;
# uname -a    #查看内核是否生效;


##kube-proxy开启ipvs的前置条件;kube-proxy主要解决SVC与POD之间的调度关系,LVS可以提高其工作效率,故应开启ipvs变更为LVS调度方式。
modprobe br_netfilter
lsmod |grep 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 -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
yum list docker-ce

mkdir /etc/docker
##native.cgroupdriver=systemd表示交由systemd进行cgroup执行隔离;日志修改为json-file存储类型,大小为100M;
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
systemctl daemon-reload && systemctl start docker && systemctl enable docker
systemctl status 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/yum/doc/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
yum list kubeadm kubectl kubelet
systemctl enable kubelet.service

##初始化主节点前需导入docker镜像,一般从谷歌网站拉取,但可从本地上传kubeadm-basic.images.tar.gz以加快安装。
# ~~~将上传镜像压缩包至root目录
tar -xzvf kubeadm-basic.images.tar.gz
ls /root/kubeadm-basic.images > /tmp/image-list.txt
cd kubeadm-basic.images
##导入使用 docker save 命令导出的镜像*.tar文件。
for i in $(cat /tmp/image-list.txt)
do
    docker load -i $i
done
rm -f /tmp/image-list.txt
docker images               #查看7个组件的镜像是否上传。

##以root用户将工作节点加入集群,每次初始化成功后,token会变化。
kubeadm join 192.168.66.10:6443 --token 5r2tqs.x6vyjl079hp8xmmw \
    --discovery-token-ca-cert-hash sha256:321478ffaa9815b6c3b8272e50111e81a8b16892f3e71143b739558d244066cb



###设置私有仓库域名没有购买的证书,故应设置insecure-registries表示该仓库是安全的。
vi /etc/docker/daemon.json
~~~~~~~~~
{
    "exec-opts":["native.cgroupdriver=systemd"],
    "log-driver":"json-file",
    "log-opts":{
        "max-size":"100m"
    },
    "insecure-registries": ["https://hub.atguigu.com"]
}
~~~~~~~~~
systemctl restart docker

  

 

标签:iptables,03,kubernetes,192.168,etc,集群,yum,kubeadm
来源: https://www.cnblogs.com/chalon/p/14897553.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有