kubeadm部署最新版k8s集群V1.18.0
安装部署时间:2020年3月26日
文档更新时间:2020年3月27日
文档更新原因:国内yum源有1.18.0版本kubeadm kubelet kubectl
官方文档:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
kubeadm部署k8s高可用集群的官方文档:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
更新日志:
(新版本刚出,没有中文更新日志,可能部分解释有偏差)
https://kubernetes.io/blog/
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md
我们很高兴宣布Kubernetes 1.18的交付,这是我们2020年的第一版!Kubernetes 1.18包含38个增强功能:15个增强功能已趋于稳定,beta增强了11个,alpha增强了12个。
Kubernetes 1.18是一个“完美”的版本。为了改善用户体验,已经在改进beta和稳定功能方面进行了大量工作。我们付 出了同等的努力来增加新的开发和令人兴奋的新功能,这些承诺有望进一步增强用户体验。对alpha,beta和稳定版进行几乎一样多的增强是一项伟大的成就。它显示了社区在提高Kubernetes的可靠性以及继续扩展其现有功能方面所做的巨大努力。
主要主题
Kubernetes拓扑管理器移至Beta-对齐!
拓扑管理器功能是 1.18版中Kubernetes的beta功能,它使CPU和设备(例如SR-IOV VF)实现NUMA对齐,这将使您的工作负载在针对低延迟而优化的环境中运行。在引入拓扑管理器之前,CPU和设备管理器将做出彼此独立的资源分配决策。这可能会导致在多套接字系统上分配不良信息,从而导致延迟关键型应用程序的性能下降。
Serverside Apply推出Beta 2
服务器端Apply在1.16中升级为Beta,但现在在1.18中引入了第二个Beta。这个新版本将跟踪和管理所有新Kubernetes对象的字段更改,从而使您知道什么更改了资源以及何时更改。
使用IngressClass扩展Ingress并用IngressClass替换不推荐使用的注释
在Kubernetes 1.18中,Ingress有两个重要的补充:一个新pathType字段和一个新IngressClass资源。该pathType字段允许指定路径应如何匹配。除了默认ImplementationSpecific类型外,还有new Exact和Prefixpath类型。
该IngressClass资源用于描述Kubernetes集群中的Ingress类型。入口可以通过ingressClassName在入口上使用新字段来指定与它们关联的类。此新资源和字段替换了不建议使用的kubernetes.io/ingress.class注释。
SIG-CLI引入kubectl调试
SIG-CLI一直在争论是否需要调试实用程序。随着临时容器的发展,我们可以通过在kubectl exec。该kubectl debug命令的添加(它是Alpha,但欢迎您提供反馈),使开发人员可以轻松地在集群中调试其Pod。我们认为这种增加是无价的。此命令允许创建一个临时容器,该容器在要检查的Pod旁边运行,并且还附加到控制台以进行交互式故障排除。
为Kubernetes引入Windows CSI支持Alpha
随着Kubernetes 1.18的发布,用于Windows的CSI代理的Alpha版本也已发布。CSI代理使非特权(预先批准)的容器能够在Windows上执行特权存储操作。现在,可以利用CSI代理在Windows中支持CSI驱动程序。
其他更新
毕业到稳定
污秽驱逐
kubectl diff
CSI块存储支持
API Server空运行
在CSI呼叫中传递Pod信息
支持树外vSphere Cloud Provider
为Windows工作负载支持GMSA
跳过附加的非附加CSI卷
PVC克隆
将kubectl软件包代码移至暂存
Windows的RunAsUserName
适用于服务和端点的AppProtocol
扩展大页面功能
客户端签名重构,以标准化选项和上下文处理
节点本地DNS缓存
主要变化
EndpointSlice API
将kubectl软件包代码移至暂存
CertificateSigningRequest API
扩展大页面功能
客户端签名重构,以标准化选项和上下文处理
各个组件之间的兼容性关系
注:因网络原因,kubeadm,kubectl,kubelet的版本无法更新到V1.18.0,故将使用最新版V1.17.4,且可兼容。后续国内yum源支持,可根据下面官方文档升级。(已更新,请忽略)
升级kubeadm集群:
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
kubernetes各个组件版本之间的兼容性关系:
https://kubernetes.io/zh/docs/setup/release/version-skew-policy/
kubelet
kubelet 版本号不能高于 kube-apiserver,最多可以比 kube-apiserver 低两个小版本。
例如:
kube-apiserver 版本号如果是 1.13
kubelet 只能是 1.13 、 1.12 和 1.11
kubectl
kubectl 可以比 kube-apiserver 高一个小版本,也可以低一个小版本。
例如:
如果 kube-apiserver 当前是 1.13 版本
kubectl 则支持 1.14 、1.13 和 1.12
查看指定版本k8s,所需镜像的版本:
[root@k8s-master ~]# kubeadm config images list --kubernetes-version=v1.18.0
k8s.gcr.io/kube-apiserver:v1.18.0
k8s.gcr.io/kube-controller-manager:v1.18.0
k8s.gcr.io/kube-scheduler:v1.18.0
k8s.gcr.io/kube-proxy:v1.18.0
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
安装开始
准备三台机器
vi /etc/hosts
192.168.100.10 kub-k8s-master
192.168.100.20 kub-k8s-node1
192.168.100.30 kub-k8s-node2
所有机器系统配置
1.关闭防火墙:
# systemctl stop firewalld
# systemctl disable firewalld
2.禁用SELinux:
# setenforce 0
3.编辑文件/etc/selinux/config,将SELINUX修改为disabled,如下:
# sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
SELINUX=disabled
关闭系统Swap:1.5之后的新规定
Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。方法一,通过kubelet的启动参数–fail-swap-on=false更改这个限制。方法二,关闭系统的Swap。
1.关闭swap分区
# swapoff -a
修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认swap已经关闭。
2.注释掉swap分区:
# sed -i 's/.*swap.*/#&/' /etc/fstab
# free -m
total used free shared buff/cache available
Mem: 1980 123 1310 9 546 1693
Swap: 0 0 0
# 注:以上两步都做,第一步临时关闭,第二步永久关闭
安装docker–三台机器都操作
# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# yum install -y yum-utils device-mapper-persistent-data lvm2 git
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum install docker-ce -y
启动并设置开机启动
阿里下载镜像
[root@k8s-master ~]# docker pull registry.cn-qingdao.aliyuncs.com/kubernetes-image/kube-controller-manager:v1.18.0
[root@k8s-master ~]# docker pull registry.cn-qingdao.aliyuncs.com/kubernetes-image/kube-proxy:v1.18.0
[root@k8s-master ~]# docker pull registry.cn-qingdao.aliyuncs.com/kubernetes-image/kube-apiserver:v1.18.0
[root@k8s-master ~]# docker pull registry.cn-qingdao.aliyuncs.com/kubernetes-image/kube-scheduler:v1.18.0
[root@k8s-master ~]# docker pull registry.cn-qingdao.aliyuncs.com/kubernetes-image/coredns:1.6.7
[root@k8s-master ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
[root@k8s-master ~]# docker pull registry.cn-qingdao.aliyuncs.com/kubernetes-image/pause:3.2
给镜像打tag
[root@k8s-master ~]# docker tag registry.cn-qingdao.aliyuncs.com/kubernetes-image/kube-controller-manager:v1.18.0 k8s.gcr.io/kube-controller-manager:v1.18.0
[root@k8s-master ~]# docker tag registry.cn-qingdao.aliyuncs.com/kubernetes-image/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0
[root@k8s-master ~]# docker tag registry.cn-qingdao.aliyuncs.com/kubernetes-image/kube-apiserver:v1.18.0 k8s.gcr.io/kube-apiserver:v1.18.0
[root@k8s-master ~]# docker tag registry.cn-qingdao.aliyuncs.com/kubernetes-image/kube-scheduler:v1.18.0 k8s.gcr.io/kube-scheduler:v1.18.0
[root@k8s-master ~]# docker tag 67d k8s.gcr.io/coredns:1.6.7
[root@k8s-master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
[root@k8s-master ~]# docker tag 80d k8s.gcr.io/pause:3.2
使用kubeadm部署Kubernetes:
在所有节点安装kubeadm和kubelet:
配置yum源
# cat <<EOF > /etc/yum.repos.d/kubernetes.repo