k8s安装笔记

  • 基础环境配置
    • 修改主机名:
    • 修改hosts配置文件
    • 安装依赖包
    • 关闭防火墙并未Iptables设置空规则
    • 关闭swap分区和linux虚拟内存
    • 调整内核参数
    • 调整系统时区
    • 关闭系统不需要服务
    • 设置日志方案
    • 内核版本升级
  • kubeadm部署安装
    • kube-proxy开启ipvs的前置条件
    • 安装docker软件
    • 安装kubeadm
  • k8s组件容器部署
    • k8s所需镜像下载:
    • 部署flannel网络插件:
    • 加入node节点

基础环境配置

主机配置:32G运行内存,共创建四个虚拟机,虚拟机配置如下:

主机名 系统 配置 IP
k8s-master centos7 2c 4Gb *100Gb 192.168.204.133
k8s-node01 centos7 2c 4Gb *100Gb 192.168.204.130
k8s-node02 centos7 2c 4Gb *100Gb 192.168.204.131
k8s-hubor centos7 2c 4Gb *100Gb 192.168.204.132

修改主机名:

hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02
hostnamectl set-hostname k8s-harbor

修改hosts配置文件

  大型环境中,建议通过DNS主机名和ip进行关联;但在小环境的练习中,&可以直接修改hosts文件,来进行主机名和ip地址的解析(用DNS解析的话,如果DNS死掉,整个集群也会跟着不能用)
  vi /etc/hosts 添加各个虚拟机的IP地址,在一个master节点和两个node节点都修改相同的内容,如下:

192.168.204.133 k8s-master01
192.168.204.130 k8s-node01
192.168.204.131 k8s-node02
可以在master节点修改host文件之后用scp命令拷贝到其他的节点。

安装依赖包

  利用yum命令安装相关的依赖包:

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim 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

关闭swap分区和linux虚拟内存

  kubeadm安装k8s集群的时候,init初始化时会检测swap分区有没有关闭,如果开启虚拟内存,pod有可能会被放在虚拟内存中运行,会降低工作效率,因此会强制要求关闭swao分区(也可以通过–ingress来排除该项报错)。

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

调整内核参数

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 #立即生效

执行sysctl 指令时会报如下错误,原因是没有br_netfilter模块:
执行命令modprobe br_netfilter 加载模块,然后在执行sysctl命令;

调整系统时区

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

关闭系统不需要服务

关闭系统的邮件服务,尽可能的较少系统资源占用空间

systemctl stop postfix && systemctl disable postfix

设置日志方案

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

内核版本升级

更新yum源仓库

yum -y update

  • 安装 ELRepo 源:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

  • 启用 ELRepo 源仓库:

yum --disablerepo="*" --enablerepo=“elrepo-kernel” list available

  • 安装新内核:

yum -y --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel

  • 查看当前内核版本:

cat /boot/grub2/grub.cfg |grep menuentry

  • 本文升级的最新版本为5.9.8-1.el7.elrepo.x86_64
    升级版本之后需要把最新的版本设置为默认启动版本:

grub2-set-default ‘Oracle Linux Server (5.9.8-1.el7.elrepo.x86_64) 7 (Core)’

  • 然后在删除旧版本内核
    升级之后更新yum环境:

yum update

kubeadm部署安装

kube-proxy开启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

执行该命令引入模块时报错:

缺少模块 nf_conntrack_ipv4,这里先暂时忽略该错误,自己也不确定是否影响ipvs服务开启。

安装docker软件

安装docker镜像依赖-存储驱动:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

导入阿里云docker-ce镜像仓库:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装docker-ce:

yum install docker-ce
启动docker:
systemctl start docker

设置开机自启:

systemctl enable docker

配置镜像加速deamon:

vi /etc/docker/daemon.json
{
“registry-mirrors”: [“https://4bsnyw1n.mirror.aliyuncs.com”],
“exec-opts”:[“native.cgroupdriver=systemd”]
}

重启docker

systemctl daemon-reload && systemctl restart docker

安装kubeadm

导入阿里云的yum仓库:

cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

在每个节点安装kubeadm、kubectl、kubelet
安装初始化工具、命令行管理工具、与docker的cri交互创建容器kubelet

yum -y install kubeadm kubectl kubelet – disableexcludes=kubernetes

k8s开机自启

systemctl enable kubelet.service & systemctl start kubelet.service

k8s组件容器部署

k8s所需镜像下载:

Kubernetes几乎所有的安装组件和Docker镜像都放在goolge自己的网站上,因网络问题无法直接访问,可以从阿里云镜像仓库下载镜像,拉取到本地以后改回默认的镜像tag。本文通过运行https://blog.csdn.net/weixin_36625300/article/details/108697078提供的image.sh脚本方式拉取镜像。
cat image.sh

#!/bin/bash
url=registry.aliyuncs.com/google_containers
version=v1.19.2
images=(kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}')
for imagename in ${images[@]} ; do
docker pull u r l / url/ url/imagename
docker tag u r l / url/ url/imagename k8s.gcr.io/$imagename
docker rmi -f u r l / url/ url/imagename
done

初始化文件配置:

kubeadm config print init-defaults > kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:- groups:- system:bootstrappers:kubeadm:default-node-token   token: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.204.133bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: k8s-master01taints:- effect: NoSchedulekey: 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.19.2
networking:dnsDomain: cluster.localpodSubnet: "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

执行初始化命令:

kubeadm init --config=kubeadm-config.yaml | tee kubeadm-init.log

初始化成功之后按照提示依次执行命令:

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

此时在master节点执行kubectl get node可以看到节点状态为:
此时为NotReady状态,原因是因为集群还没有部署flannel网络;

部署flannel网络插件:

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

因网络问题,无法直接下载成功,可以先访问https://tool.chinaz.com/dns/?type=1&host=raw.githubusercontent.com&ip=查看raw.githubusercontent.com的真实IP,
并在宿主机的/etc/hosts中添加地址解析之后即可下载:

cat >> /etc/hosts << EOF
151.101.108.133 raw.githubusercontent.com
EOF

成功部署flannel网络之后,master节点即变为了ready状态。

加入node节点

在子节点中执行:

kubeadm join 192.168.204.133:6443 --token abcdef.0123456789abcdef
–discovery-token-ca-cert-hash sha256:0381ce230d0678ec26d15ec7910f0962e251711232fd11d247e6f205f83aa814

此时执行kubectl get node即可看到所加入的节点:
注意:子节点中也会启动flannel容器,所以在加入子节点之前,该节点要存在flannel镜像,由于网络问题,不能直接下载,可以采取前文中的镜像下载脚本下载该镜像。
至此,k8s集群已完成部署,感谢尚硅谷所提供的k8s学习视频,下一篇将实践操作harbor仓库的部署!

k8s学习笔记一集群部署相关推荐

  1. 【联邦学习】FATE 集群部署 step3

    [联邦学习]FATE 集群部署step1 [联邦学习]FATE 集群部署step2 部署FATE 参考中文集群部署文档 all 指的是2个虚拟机都要操作 f1 只的是1号虚拟机 f2 指的是2号虚拟机 ...

  2. 【联邦学习】FATE 集群部署 step2

    [联邦学习]FATE 集群部署step1 [联邦学习]FATE 集群部署step3 配置虚拟机网络 配置虚拟机镜像 all 指的是2个虚拟机都要操作 f1 只的是1号虚拟机 f2 指的是2号虚拟机 配 ...

  3. 【联邦学习】FATE 集群部署 step1

    [联邦学习]FATE 集群部署step2 [联邦学习]FATE 集群部署step3 安装VMW15 下载安装centos7 配置VMW NAT网络 VMW15 下载安装 https://www.vmw ...

  4. ElasticSearch学习(三)——Windows集群部署

    文章名称 地址 ElasticSearch学习(一)--概述 前往 ElasticSearch学习(二)--索引.文档简单操作 前往 ElasticSearch学习(三)--Windows 集群部署 ...

  5. OpenSIPS学习笔记-cluster集群模块配置-dialog集群配置

    本章节中,笔者将进一步介绍关于OpenSIPS集群支持的另外一种常见的场景-dialog的集群.dialog集群是OpenSIPS在高并发环境中一定需要考虑的配置功能.通过集群部署方式,可以保证呼叫中 ...

  6. kafka学习总结之集群部署和zookeeper

    1.  集群部署 kafka集群的瓶颈主要在网络和磁盘上:kafka依赖于zookeeper,zookeeper集群的节点采用奇数个,3个节点允许一个节点失败,5个节点允许2个节点失败. 图 1 ka ...

  7. 数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)

    目录 集群 集群配置 单节点集群 分布式集群 故障转移 水平扩容 路由计算&分片控制 数据CRUD流程 写流程 读流程 更新流程 删除流程 分词器 IK分词器 Pinyin分词器 简繁体转换器 ...

  8. Kubernetes(k8s)入门及集群部署文档

    文章目录 一.k8s 快速入门 简介 部署方式的进化 k8s能做什么 架构 整体主从方式 Master 节点架构 Node 节点架构 概念 快速体验 流程叙述 二.k8s 集群安装 前置要求 了解ku ...

  9. Redis学习笔记:集群

    这是本人学习的总结,主要学习资料如下 B站狂神说,redis教程 马士兵教育 目录 1.集群前置知识 1.1.数据分区策略 1.1.1.哈希节点取余分区 1.1.2.一致性哈希分区 1.1.3.虚拟一 ...

最新文章

  1. php中mysql和mysqli_PHP中mysql和mysqli的区别
  2. 使用 WeihanLi.Npoi 操作 CSV
  3. 三句话介绍清楚滑动窗口协议/GBN/SR
  4. 阿里巴巴HRSSC:用宜搭实现业务管理模式创新
  5. Spring Cloud —— 消息队列与 RocketMQ
  6. Linux --- awk
  7. 【Tomcat】Tomcat下设置项目为默认项目
  8. 为informix数据库中的表创建同义词
  9. 迷宫~哈哈~终于懂了BFS
  10. 4k视频写入速度要求_雷克沙高速SD存储卡允许4K视频拍摄
  11. 算法工程师书籍推荐——典藏版
  12. DIY一块单面1TB高速NVMe SSD, SM2262EN量产开卡软件+JMS583转接
  13. css3 - 图标元素动画效果1 - 只执行一次动画
  14. 什么是机器翻译?(科普向)
  15. xbox360 FSD 安装游戏教程(Freestyle3)
  16. matlab数据导出wps,怎么把金山WPS表格的数据导入MATLAB/
  17. 微信跳转,wxtz,跳转微信关注公众号
  18. xp无法访问2012r2域计算机列表,新安装Windows 2012域控无法没有自动创建Sysvol netlogon共享--钉子-Exchange MVP...
  19. javascript百炼成仙 第一章 掌握JavaScript基础01 初入宗门
  20. 袁毓林 李强:怎样用物性结构知识解决“网球问题”?(下)

热门文章

  1. Word 2007-破解只能浏览而不能编辑的文档
  2. cmder 窗口,λ后面总会多一个字母
  3. 绝地重生微软服务器,绝地重生打开麦克风 | 手游网游页游攻略大全
  4. Easypack: Ansible方式部署工具中增加Metrics Server支持
  5. 好看的电影,好心分享【2】
  6. 月薪5000,如何在上海租房,租房费用大揭秘!
  7. UE5 VR模板打包运行,Quit Game崩溃
  8. 2022-2028中国高纯氘气市场现状研究分析与发展前景预测报告
  9. matlab曲面与直线交点,MATLAB中求椭圆与直线的交点为什么交点不在椭圆和直线上?...
  10. 计算机网络中的安全(一)网络安全的概念与加密原理