首页 > 其他 > 详细

k8s集群安装

时间:2020-11-27 11:55:11      阅读:43      评论:0      收藏:0      [点我收藏+]

1. 设置主机名及hosts文件相互解析

vim /etc/hostname 或 hostnamectl set-hostname k8s-master01

vim /etc/hosts

10.164.129.252 k8s-master01
10.164.129.253 k8s-node01
10.164.129.254 k8s-node02

2. 安装依赖包

修改yum源

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

3. 设置防火墙为iptables, 并置空规则

systemctl stop firewalld && systemctl disable firewalld

yum install -y iptables-services

systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

4. 关闭SELINUX

swapoff -a 将虚拟空间关闭, k8s在开机的时候会检测, 防止出现容器运行在虚拟内存的情况, 会大大降低工作效率

sed -i ‘/ swap / s/^\(.*\)$/#\1/g‘ /etc/fstab  找到 swap 所在行, 然后替换, .*代表一整行, \1代表第一个括号里的内容, 意思是在整行前头加注释#

setenforce 0 && sed -i ‘s/^SELINUX=.*/SELINUX=disable/‘ /etc/selinux/config

5. 调整内核参数--k8s

vim /etc/sysctl.d/kubernetes.conf

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.netfilter.nf_conntrack_max=2310720

EOF

sysctl -p /etc/sysctl.d/kubernetes.conf

6. 调整系统时区

设置系统时区为亚洲/上海

timedatectl set-timezone Asia/Shanghai

将当前UTC写入硬件时钟

timedatectl set-local-rtc 0

重启依赖于系统时间的服务

systemctl restart rsyslog

systemctl restart crond

7. 关闭系统不需要的服务

systemctl stop postfix && systemctl disable postfix     // 关闭邮件服务, 尽可能降低系统占用资源

8. 设置日志保存方式

两个日志系统: rsyslogd 和 systemd journald, 前者默认, 后者更好,

修改默认为systemd journald:

a. 创建持久化目录

mkdir /var/log/journal

b. 创建配置文件转换目录:

mkdir /etc/systemd/journald.conf.d

c. 创建配置文件:

cat /etc/systemd/journald.conf.d/99-prophet.conf

 

[Journal]
#持久化保存到磁盘 Storage=persistent #压缩历史日志 Compress=yes SyncIntervalSec=5m RateLimitInterval=30s RateLimitBurst=1000 #最大占用空间10G SystemMaxUse=10G #单日志文件最大200M SystemMaxFileSize=200M #日志保存时间2周 MaxRetentionSec=2week #不将日志转发到syslog ForwardToSyslog=no

 

systemctl restart systemd-journald    // 重启服务

9. 升级内核为4.44版本

    3.x版本的内核存在bug, 在运行k8s, docker时不稳定

 

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    // wait download

 grub2-editenv list  -----查看grub.cfg的入口项

grub2-set-default "CentOS Linux (4.4.245-1.el7.elrepo.x86_64) 7 (Core)"     // 修改grub.cfg的入口项, 修改启动机器时使用的内核

reboot

uname -r    // 查看当前启动的内核

10. kube-proxy开启ipvs的前置条件

  把它的模式改为ipvs调度的方式,  kube-proxy主要解决svc与pod之间的调度关系

  // modprobe:用于向内核中加载模块或者从内核中移除模块

    // modprobe  br_netfilter  加载模块

    // modprobe  -r  br_netfilter  移除模块

cat /etc/sysconfig/modules/ipvs.modules

#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

技术分享图片

 

 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-ce.repo的yum源

yum update -y && yum install -y docker-ce    // 升级软件以及安装docker-ce

grub2-set-default "CentOS Linux (4.4.245-1.el7.elrepo.x86_64) 7 (Core)" && reboot   //因为此时默认启动内核被修改了, grub2-editenv list 可以查看

systemctl start docker

systemctl enable docker     // 开启docker服务, 并设置开机启动

vim /etc/docker/daemon.json     // docker子配置文件

{
  "exec-opts": ["native.cgroupdriver=systemd"],     //设置默认cgroup组为system
  "log-driver": "json-file",        // 将存储日志的方式改为json-file
  "log-opts": {
    "max-size": "100m"
  }
}

 

#创建docker配置文件目录

mkdir -p /etc/system/docker.service.d

#重启docker服务

systemctl daemon-reload && systemctl restart docker && systemctl enable docker       // 重新加载配置文件, 重启docker, 令docker开机启动

12. 安装kubeadm(主从配置)

a. 导入yum源

vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enable=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

 

b. 安装kubernetes组件

yum install -y kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1     // kubeadm: 初始化工具;  kubectl: 命令行管理工具;  kubelet跟docker(cli)交互, 创建容器

systemctl enable kubelet.service

c. 安装kubeadm

yum install -y kubeadm kubectl kubelet (若有旧版本, 可先卸载 yum remove kubeadm kubectl kubelet kubernetes-cni cri-tools socat )

systemctl enable kubelet

13. 初始化主节点

kubeadm config print init-defaults > kubeadm-config.yaml     // 打印默认的init配置文件, 并写入到kubeadm-config.yaml(不强制在某个目录底下)

vim 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: 10.164.129.252      //改为Master本机地址
  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: registry.aliyuncs.com/google_containers     //拉取镜像的地址, 换成aliyun; 默认会从google的镜像仓库地址k8s.gcr.io下载镜像,如果你没有kexueshangwang,那么就会 下载不来。
kind: ClusterConfiguration
kubernetesVersion: v1.19.4     //更新为当前版本
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      //红字部分为新增, 将默认的调度方式改为ipvs调度

 kubeadm config images pull --config kubeadm-config.yaml     // 拉取镜像

docker images      // 查看下载好的镜像 

技术分享图片

 

镜像下载好后需要修改tag, 将registry.aliyuncs.com/google_containers 改回k8s.gcr.io, 不然后边安装会出问题, kubeadm只认google自己的tag

写个脚本, 批量修改vim tag.sh

#!/bin/bash

newtag=k8s.gcr.io
for i in $(docker images | grep -v TAG |awk ‘{print $1 ":" $2}‘)
do
   image=$(echo $i | awk -F ‘/‘ ‘{print $3}‘)
   docker tag $i $newtag/$image
   docker rmi $i
done

 

 bash tag.sh

docker images 查看镜像

技术分享图片

 

 初始化

kubeadm init --config=kubeadm-config.yaml --upload-certs | tee 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要求创建的几个目录

14. 部署flannel网络

先创建下目录存放flannel的yaml文件

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/

wget http://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml      // 获取flannel的yaml文件

下载好后, 直接创建

kubectl create -f kube-flannel.yml

查看pod, -n 表示指定名称空间, 默认default, 但系统组件会安装到kube-system下

技术分享图片

 

 拉取镜像成功后

技术分享图片

 

 技术分享图片

 

 15. 部署子节点

kubeadm初始化成功后, 会生成加入子节点的命令

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 NotReady是因为还没有初始化成功, 可以看下详细信息

技术分享图片

 

 等到Ready就初步部署成功了 , 但目前它还不是一个高可用环境

技术分享图片

 

k8s集群安装

原文:https://www.cnblogs.com/Bruce-Y/p/14025894.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!