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就初步部署成功了 , 但目前它还不是一个高可用环境

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