虚拟机网络配置
VMware 编辑->虚拟网络编辑器
添加VMnet8网络,采用NAT模式,配置网关
基础环境
安装虚拟机
本次部署采用三台CentOS 7系统虚拟机组成集群,一台master节点和两台node节点。所有主机CPU核数必须大于等于2核 ,内存最好2G以上,硬盘30G以上。
可以先创建一台主机,配置完成后使用复制功能进行复制,然后修改hostname及IP地址即可。
静态IP配置
一、 在安装的时候采用图形化配置,这种方式比较稳妥
二、 安装完成后修改网卡配置
cd /etc/sysconfig/network-scripts/
vi ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="eeadd13f-89ce-4be4-905b-bb15221d3e87"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.5.110"
PREFIX="24"
GATEWAY="192.168.5.2"
IPV6_PRIVACY="no"
DNS1=114.114.114.114
其中BOOTPROTO设置为static,ONBOOT设置为yes,增加IPADDR,PREFIX和PREFIX配置。
然后重启网络 service network restart 网络环境搭建完毕!
系统配置
1. 关闭防火墙
测试环境,量产环境需要根据相关组件的端口进行配置
$ systemctl stop firewalld
$ systemctl disable firewalld
2. 关闭selinux
为什么要关闭selinux,因为有的软件对于selinux的安全规则支持不够好,就会建议在安装前把selinux先关闭,比如k8s。
$ sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
$ setenforce 0 # 临时
或者:vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后保存退出
3. 关闭swap分区
要禁用swap分区
$ swapoff -a # 临时
$ vi /etc/fstab # 永久
把加载swap分区的那行记录注释掉即可:
重启机器 reboot,再用
free -m检查一下:
4. 配置hostname和hosts
hostnamectl set-hostname <hostname>
$ cat >> /etc/hosts << EOF
192.168.52.110 k8s-master
192.168.52.111 k8s-node1
192.168.52.112 k8s-node2
EOF
hostname如上设置
5. 将桥接的IPv4流量传递到iptables的链
有一些ipv4的流量不能走iptables链(linux内核的一个过滤器,每个流量都会经过他,然后再匹配是否可进入当前应用进程去处理,导致流量丢失)
$ cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sysctl --system # 生效
6. 时间同步
$ yum install ntpdate -y
$ ntpdate time.windows.com
虚拟机无需进行时间同步
7.基础依赖
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git iproute lrzsz bash-completion tree bridge-utils unzip bind-utils gcc
8.克隆主机
克隆以上配置好的主机,修改IP地址和主机名。
安装Docker(所有节点)
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
$ yum -y install docker-ce-18.06.1.ce-3.el7
$ systemctl enable docker && systemctl start docker
#查看
$ docker --version
Docker version 18.06.1-ce, build e68fc7a
配置daemon,修改源和cgroupdriver。
cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"}}
EOF
Docker 在默认情况下使用的 Cgroup Driver 为 cgroupfs,K8S推荐使用systemd来代替。
配置文件出错会导致Docker启动失败,通过journalctl -xe可以查看:
重启Docker服务:
systemctl restart docker
查看状态:systemctl status docker
安装kubeadm,kubelet和kubectl(所有节点)
添加K8S源
$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#更新
$ yum update -y
$ yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
$ systemctl enable kubelet
部署Master节点
kubeadm init \
--apiserver-advertise-address=192.168.52.110 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
--apiserver-advertise-address 集群通告地址
--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
--kubernetes-version K8s版本,与上面安装的一致
--service-cidr 集群内部虚拟网络,Pod统一访问入口
--pod-network-cidr Pod网络,,与下面部署的CNI网络组件yaml中保持一致
以上两个网段由官方推荐的网段
或者以配置文件的形式:
kubeadm config print init-defaults > kubeadm-config.yaml
初始化配置文件:
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.52.110
bindPort: 6443
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.23.0
networking:
dnsDomain: cluster.local
podSubnet: "10.244.0.0/16"
serviceSubnet: 10.96.0.0/12
scheduler: {}
kubeadm init --config=kubeadm-config.yaml | tee kubeadm-init.log
以配置文件的形式初始化节点,如果失败执行kubeadm reset恢复。
初始化过程中报错:
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
执行
echo "1" > /proc/sys/net/ipv4/ip_forward即可。
成功后会生成加入master节点的命令:
并根据建议生成config文件:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者以root用户export KUBECONFIG=/etc/kubernetes/admin.conf
安装flannel插件
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
$ kubectl create -f kube-flannel.yml
此时运行kubectl get nodes,可以看到主节点已经在运行中:
Node节点加入集群
用master节点生成的命令加入集群:
kubeadm join 192.168.52.110:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:dade28ba47aedef55c2be27cefa781b76e2a53482a3f32eabc933c6a27fb567a
再次在主节点上查看节点状态:
至此,基础的K8S集群搭建完成。