说明
根据kubernetes v1.13的Release Note说明
从Kubernetes v1.13.x开始,kubeadm的
kubeadm.k8s.io/v1alpha3
被标记为废弃并将于kubernetes v1.14版开始被移除,新的apiVersion为kubeadm.k8s.io/v1beta1
这里是关于
kubeadm.k8s.io/v1beta1
的说明文档下面演示环境使用1个master节点+2个node节点部署kubernetes集群
仅记录我的部署流程,不一定满足各种需求,自己看菜吃饭!
服务器配置
主机名 | IP地址 | 角色 | 操作系统 | Docker版本 | kubeadm版本 |
---|---|---|---|---|---|
k8s-master | 172.16.80.200 | master+node | CentOS-7.6.1810 | 18.09.6 | v1.13.7 |
k8s-node1 | 172.16.80.201 | node | CentOS-7.6.1810 | 18.09.6 | v1.13.7 |
k8s-node2 | 172.16.80.202 | node | CentOS-7.6.1810 | 18.09.6 | v1.13.7 |
服务器初始化
配置/etc/hosts
1 | 127.0.0.1 localhost |
禁用swap分区
1 | swapoff -a |
部署kubernetes集群
创建YUM源
使用阿里云的kubernetes YUM源
1 | [kubernetes] |
刷新YUM缓存
1 | yum makecache |
安装kubernetes-v1.13.7
1 | yum install kubeadm-1.13.7-0.x86_64 kubelet-1.13.7-0.x86_64 kubectl-1.13.7-0.x86_64 cri-tools-1.12.0-0.x86_64 kubernetes-cni-0.7.5-0.x86_64 |
添加bash自动补全命令
1 | kubeadm completion bash > /etc/bash_completion.d/kubeadm |
配置文件说明
kubeadm的配置文件被拆分成了以下几个类型
InitConfiguration
ClusterConfiguration
KubeletConfiguration
KubeProxyConfiguration
JoinConfiguration
对应到配置文件里面的格式如下
1 | apiVersion: kubeadm.k8s.io/v1beta1 |
创建配置文件
kubeadm命令可以打印
InitConfiguration
、ClusterConfiguration
和JoinConfiguration
的默认配置
init-defaults
1 | kubeadm config print init-defaults |
输出示例
1 |
|
join-defaults
1 | kubeadm config print join-defaults |
输出示例
1 | apiVersion: kubeadm.k8s.io/v1beta1 |
修改配置文件
对于没有设置或者配置了一部分的参数,kubeadm会使用默认值
这里精简了很多配置,自己决定是否增加配置!
kubeadm-init.yaml
1 |
|
检查配置文件
1 | kubeadm init --config=kubeadm-init.yaml --dry-run |
命令执行完毕,可以在
/tmp/kubeadm-init-dryrun*
里面看到生成的配置文件可以检查一下是否符合预期!
初始化集群
1 | kubeadm init --config=kubeadm-init.yaml |
集群初始化完成之后,终端会打印出信息
1 | Your Kubernetes master has initialized successfully! |
节点加入集群
运行kubeadm init初始化集群之后的提供的join命令,将节点加入集群
1 | kubeadm join 172.16.80.200:6443 --token uqc4n7.mfs4ep1br9l9ztsi --discovery-token-ca-cert-hash sha256:b30dd4d598baf1a3a53fe794d02302788e71e4314947cf7df5a75e98dd2ed97a |
查看节点信息
还没部署CNI插件,所以节点状态为NotReady
1 | kubectl get nodes -o wide |
- 输出示例
1 | NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME |
部署CNI插件
这里用flannel
1 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
查看集群状态
- 查看节点信息
1 | kubectl get node |
可以看到节点状态为Ready
1 | NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME |
- 查看Pod信息
1 | kubectl get pod --all-namespaces -o wide --sort-by=.spec.nodeName |
这里根据节点名字作为排序依据来输出结果
1 | NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES |
master节点参与负载
kubeadm部署的kubernetes集群,出于安全考虑,在初始化集群后会给master节点打上
node-role.kubernetes.io/master:NoSchedule
污点,避免Pod被调度到master节点。作为实验环境,可以去除污点,让Pod可以调度到master节点
1 | kubectl taint nodes k8s-master node-role.kubernetes.io/master- |
至此kubernetes集群已经搭建完成
最简化的部署!!!!