主机准备 VMware安装三台CentOS7虚拟机,一台作为master节点,2台作为worker节点。
主机名
操作系统
CPU核数
内存
角色
master1
CentOS7最小化
2
2G
master
worker1
CentOS7最小化
2
2G
worker
worker2
CentOS7最小化
2
2G
worker
主机网络配置 设置主机名 1 hostnamectl set-hostname XXX
设置IP 编辑配置文件
1 vi /etc/sysconfig/network-scripts/ifcfg-ens33
添加如下设置:
1 2 3 4 5 BOOTPROTO="none" #获取ip方式,把dhcp改为none IPADDR="192.168.216.XXX" PREFIX="24" #设置子网掩码 或者"NETMASK=255.255.255.0" GATEWAY="192.168.xxx.xxx" DNS1="119.29.29.29"
重启网卡:
1 systemctl restart network
查看ip
设置主机名称解析
添加
1 2 3 192.168.xxx.xxx master1 192.168.xxx.xxx worker1 192.168.xxx.xxx worker2
主机安全配置 关闭防火墙 1 2 3 4 systemctl stop firewalld systemctl disable firewalld firewall-cmd --state
SELINUX配置 禁用selinux
1 2 3 sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config reboot getenforce
主机时间同步 由于最小化安装系统,需要单独安装ntpdate
1 2 yum -y install ntpdate crontab -l 0 */1 * * * ntpdate time1.aliyun.com
永久关闭swap分区 使用kubeadm
部署必须关闭swap分区,修改配置文件后需要重启操作系统。
1 2 3 4 cat /etc/fstab reboot free -m
添加网桥过滤 添加网桥过滤及地址转发
1 2 3 4 5 6 cat /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0
加载br_netfilter
模块
查看是否加载
1 lsmod | grep br_netfilter
加载网桥过滤配置文件,让刚刚添加的k8s.conf
配置文件生效
1 sysctl -p /etc/sysctl.d/k8s.conf
开启ipvs 安装ipset
及ipvsadm
1 yum -y install ipset ipvsadm
添加需要加载的模块,编辑配置文件vi /etc/sysconfig/modules/ipvs.modules
1 2 3 4 5 6 #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4
1 2 3 chmod 755 /etc/sysconfig/modules/ipvs.modules bash /etc/sysconfig/modules/ipvs.modules lsmod | grep -e ip_vs -e nf_conntrack_ipv4
集群软件安装
软件
作用
版本
kubeadm
初始化集群、管理集群等
1.17.2
kubelet
用于接收api-server指令,对pod生命周期进行管理
1.17.2
kubectl
集群命令行管理工具
1.17.2
docker-ce
容器管理
18.06.3
vim /etc/yum.repos.d/k8s.repo
谷歌YUM源
1 2 3 4 5 6 7 8 [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/ doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
阿里云YUM源
1 2 3 4 5 6 7 8 [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
docker安装 yum源获取,使用使用清华镜像源作为docker-ce的安装源
1 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
查看docker-ce版本,对版本排序
1 yum list docker-ce.x86_64 -- showduplicates | sort -r
安装指定版本docker-ce,此版本不需要修改服务启动文件及iptables默认规则链策略
1 yum -y install --setopt =obsoletes=0 docker-ce-18.06.3.ce-3.el7
查看docker-ce服务配置文件(可不修改)
1 cat /usr/lib/systemd/system/docker.service
添加配置文件/etc/docker/daemon.json
1 2 3 4 cat /etc/docker/daemon.json { "exec-opts" : ["native.cgroupdriver=systemd" ] }
k8s安装 安装指定版本kubeadm
,kubelet
,kubectl
在/etc/yum.repos.d
下新建文件k8s.repo
,内容填写为阿里云k8s镜像源
1 2 yum list kubeadm.x86_64 -- showduplicates | sort -r yum -y install --setopt =obsoletes=0 kubeadm-1.17.2-0 kubelet-1.17.2-0 kubectl-1.17.2-0
软件设置: 主要配置kubelet
,如果不配置可能会导致k8s集群无法启动。 为了实现docker使用的cgroupdriver
与kubelet
使用的cgroup
的一致性,建议修改如下文件内容。
1 2 vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
设置开机启动,集群初始化后自动启动
1 systemctl enable kubelet
k8s集群容器镜像准备 Master主机镜像 由于使用kubeadm部署集群,集群所有核心组件均以Pod运行,需要为主机准备镜像,不同角色主机准备不同镜像。
查看集群使用的容器镜像,将镜像列表输出到文件中,便于下载使用
1 kubeadm config images list >> image.list
修改文件image.list
,保存为镜像下载脚本image.pull
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/bin/bash img_list=' k8s.gcr.io/kube-apiserver:v1.17.2 k8s.gcr.io/kube-controller-manager:v1.17.2 k8s.gcr.io/kube-scheduler:v1.17.2 k8s.gcr.io/kube-proxy:v1.17.2 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.4.3-0 k8s.gcr.io/coredns:1.6.5 ' for img in $img_list do docker pull $img done
执镜像下载脚本:sh image.pull
查看已下载镜像:docker images
拉取k8s镜像需要科学上网。 如无法从google官网拉取镜像,也可以用通过我分享的百度云 下载到本地,提取码:6mkm
Worker主机镜像 在master节点中保存k8s.gcr.io/kube-proxy:v1.17.2
和k8s.gcr.io/pause:3.1
镜像
1 2 docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy:v1.17.2 docker save -o pause.tar k8s.gcr.io/pause:3.1
复制到2个worker节点:
1 2 scp kube-proxy.tar pause.tar worker1:/root scp kube-proxy.tar pause.tar worker2:/root
2个worker节点分别导入镜像:
1 2 docker load -i kube-proxy.tar docker load -i pause.tar
集群部署 k8s集群初始化 在master节点执行初始化操作:
1 kubeadm init --kubernetes-version=v1.17.2 --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=192.168.xxx.xxx
准备集群管理文件
1 2 3 mkdir .kube cp /etc/kubernetes/admin.conf ./.kube/config chown $(id -u):$(id -g) .kube/config
网络插件使用 calico镜像准备
百度云 下载,提取码:3ea6
1 2 3 4 docker load -i calico-cni.tar docker load -i calico-node.tar docker load -i pod2daemon-flexvol.tar docker load -i kube-controllers.tar
修改calico资源清单文件calico.yml
由于calico自身网络发现机制有问题,因此需要修改calico使用的物理网卡,添加607及608行
1 2 3 4 5 6 7 8 9 10 11 12 - name: CLUSTER_TYPE value: "k8s,bgp" - name: IP value: "autodetect" - name: IP_AUTODETECTION_METHOD value: "interface=eth.*" 607 608 - name: CALICO_IPV4POOL_IPIP value: "Always"
修改620行指定的ip地址段,设置为初始化时指定的值:
1 2 3 4 5 6 7 8 - name: CALICO_IPV4POOL_CIDR 620 value: "10.224.0.0/16" - name: CALICO_DISABLE_FILE_LOGGING value: "true"
在应用caclico资源清单文件之前,需要把calico所有的镜像导入到node节点中。
1 2 kubectl apply -f calico.yml
添加工作节点到集群 2个worker节点先导入calico
相关镜像,然后执行kubeadm join
操作。 该命令参照kubeadm init
初始化操作时生成的输出,2个worker节点分别执行:
1 kubeadm join 192.168.xxx.xxx:6443 --token m0rpym.522tija0299geb8h --discovery-token-ca-cert-hash sha256:cef7351d9fefc67868f22aa3122165dd01f63e 95870d2fb22197ee66c61b18d6
加入时报错:error execution phase preflight: couldn’t validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s
。
检查主机的防火墙是否关闭;
token错误或者已失效,生成新的token。
1 2 3 4 kubeadm token create openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
验证k8s集群可用性方法 1 2 3 4 5 kubectl get nodes kubectl get cs kubectl cluster-info