1. 环境准备

准备好4台centos7 一个为master,两个node,一个harbor(私有仓库)
Master内存大小为4g,其余都为2g,这里可以先安装一台最小版,再克隆其他3台
将4台的ip设置为静态ip,互相,本地和虚拟机,虚拟机和外网都可以ping通,且保证网络畅通。

  1. 设置系统主机名以及 Host 文件的相互解析
    每一台都设置
    vim /etc/hostname vim /etc/hosts
    192.168.137.10 k8s-master
    192.168.137.20 k8s-node1
    192.168.137.30 k8s-node2
    192.168.137.40 k8s-admin

2.安装依赖包
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vimnet-tools git

3.设置防火墙为 Iptables 并设置空规则
systemctl stop firewalld && systemctl disable firewalld
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

4.关闭 SELINUX
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
net.netfilter.nf_conntrack_max=2310720
EOF
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

6.调整系统时区
rm -f /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai
reboot

7.关闭系统不需要服务
systemctl stop postfix && systemctl disable postfix

8.设置 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
SystemMaxUse=10G
SystemMaxFileSize=200M
MaxRetentionSec=2week
ForwardToSyslog=no
EOF
systemctl restart systemd-journald

9.升级系统内核为 4.44
CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,例如:rpm -Uvh
http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

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

uname -r 检查一下

在这里插入图片描述

2. 部署k8s

  1. 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
    Chmod755 /etc/sysconfig/modules/ipvs.modules &&
    bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

2.安装 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

#创建 /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
mkdir -p /etc/systemd/system/docker.service.d

#重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
安装完后
docker –version
在这里插入图片描述

即表示安装成功

  1. 安装 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.19.1 kubectl-1.19.1 kubelet-1.19.1
    systemctl enable kubelet.service
    注:如何更换kubeadm版本
    yum list installed | grep kube
    yum remove kubeadm.x86_64 kubectl.x86_64 kubelet.x86_64 -y
    yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0(版本随意)

上面步骤需要在master,node1,node2上执行
下面步骤只需要在master上执行
4.初始化主节点
kubeadm config print init-defaults > kubeadm-config.yaml

然后修改 kubeadm-config.yaml配置
下面有注释的地方就是要修改的地方!!!
[root@docker-server1 ~]# vi 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.127.10 #master节点的IP

bindPort: 6443

nodeRegistration:

criSocket: /var/run/dockershim.sock

name: 192.168.137.10 #修改为IP地址,如果使用域名,必须保证解析正常

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 #把etcd容器的目录挂载到本地的/var/lib/etcd目录下,防止数据丢失

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #镜像仓库地址,可以修改为gcr.azk8s.cn/google_containers

kind: ClusterConfiguration

kubernetesVersion: v1.19.1 #Kubernetes软件版本

networking:

dnsDomain: cluster.local

serviceSubnet: 10.96.0.0/12

podSubnet: 10.244.0.0/16 #添加这个内容

scheduler: {}


apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
SupportIPVSProxyMode: true
mode: ipvs

预先下载镜像
kubeadm config images pull --config kubeadm-config.yaml

初始化节点
kubeadm init --config=kubeadm-config.yaml | tee kubeadm-init.log

安装成功后注意看console上运行的信息

1.会显示如下的信息 按步执行即可

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

  1. 会显示加入到master的命令,保存下来,拿到其他节点执行
    kubeadm join 192.168.137.10:6443 --token abcdef.0123456789abcdef
    –discovery-token-ca-cert-hash sha256:028fc1e2a324415e0c96895c1f5d74b91c61576c2bc574fe4199d531de3a46cd

都添加完后执行kubectl get nodes
会发现所有节点的状态都是NotReady,因为没有安装网络插件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yaml
这里如果githubusercontent访问不到可以添加hosts

151.101.76.133 raw.githubusercontent.com

等待k8s 把 pod:flannel生效 可以用命令查看状态进度:

kubectl get pods -n kube-system
等 flannel 状态显示 Running后

执行查看k8s集群运行状态命令:

sudo kubectl get nodes

在这里插入图片描述

到这里,恭喜你k8s已经部署完成!!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐