基于kubeadm在3台Ubuntu 18.04虚拟机上搭建 单master k8s集群

总体架构

1个master node, 2个work node

hostnameosipplugins
k8s-masterUbuntu 18.04192.168.199.128docker-20.10.6; kubeadm-1.18.3;kubelet-1.18.3; kubectl-1.18.3
k8s-node1Ubuntu 18.04192.168.199.129docker-20.10.6; kubeadm-1.18.3;kubelet-1.18.3; kubectl-1.18.3
k8s-node2Ubuntu 18.04192.168.199.130docker-20.10.6; kubeadm-1.18.3;kubelet-1.18.3; kubectl-1.18.3
1. 关闭防护墙、selinux、swap

关闭原因主要是出于开发方便和性能,具体原因可参考知乎

  • 关闭防火墙
sudo ufw disable
  • 关闭selinux
sudo apt install selinux-utils
setenforce 0
  • 关闭swap
    • 暂时关闭。重启后失效
    sudo swapoff -a
    
    • 永久关闭(推荐)
      为了使节点重启以后,kubelet能够自动启动,建议永久关闭swap
    sudo vim /etc/fstab
    
    注释掉/swapfile那一行
2. 添加apt kube源
sudo vim /etc/apt/sources.list

sources.list中添加一行

deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

添加公钥

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - 

更新apt

sudo apt update  

Ubuntu更换apt镜像源可以参考Ubuntu 18.04 更换apt源

3. 安装kubeadm, kubelet, kubectl

这里选用1.18.3版本

sudo apt install -y kubeadm=1.18.3-00 kubelet=1.18.3-00  kubectl=1.18.3-00

设置kubelet开机自启动

sudo systemctl enable kubelet
4. 安装Docker

Ubuntu 18.04 安装Docker

5. 克隆虚拟机

利用VMware克隆虚拟机,上方菜单栏 虚拟机 —> 管理 —> 克隆
在这里插入图片描述

6. kubeadm配置
kubeadm相关指令
kubeadm init ## 启动一个 Kubernetes 主节点
kubeadm join ## 启动一个 Kubernetes 工作节点并且将其加入到集群
kubeadm upgrade ## 更新一个 Kubernetes 集群到新版本
kubeadm config ## 如果使用 v1.7.x 或者更低版本的 kubeadm 初始化集群,您需要对集群做一些配置以便使用 kubeadm upgrade 命令
kubeadm token ## 管理 kubeadm join 使用的令牌
kubeadm reset ## 还原 kubeadm init 或者 kubeadm join 对主机所做的任何更改
kubeadm init的参数
## API Server与其他节点的通信接口
--apiserver-advertise-address string
## API Server将要广播的监听地址。如指定为 `0.0.0.0` 将使用缺省的网卡地址。
--apiserver-bind-port int32     缺省值: 6443
## API Server绑定的端口
--apiserver-cert-extra-sans stringSlice
## 可选的额外提供的证书主题别名(SANs)用于指定API Server的服务器证书。可以是IP地址也可以是DNS名称。
--cert-dir string     缺省值: "/etc/kubernetes/pki"
## 证书的存储路径。
--config string
## kubeadm配置文件的路径。警告:配置文件的功能是实验性的。
--cri-socket string     缺省值: "/var/run/dockershim.sock"
## 指明要连接的CRI socket文件
--dry-run
## 不会应用任何改变;只会输出将要执行的操作。
--feature-gates string
## 键值对的集合,用来控制各种功能的开关。可选项有:
Auditing=true|false (当前为ALPHA状态 - 缺省值=false)
CoreDNS=true|false (缺省值=true)
DynamicKubeletConfig=true|false (当前为BETA状态 - 缺省值=false)
-h, --help
## 获取init命令的帮助信息
--ignore-preflight-errors stringSlice
## 忽视检查项错误列表,列表中的每一个检查项如发生错误将被展示输出为警告,而非错误。 例如: 'IsPrivilegedUser,Swap'. 如填写为 'all' 则将忽视所有的检查项错误。
--kubernetes-version string     缺省值: "stable-1"
## 为control plane选择一个特定的Kubernetes版本。
--node-name string
## 指定节点的名称。
--pod-network-cidr string
## 指明pod网络可以使用的IP地址段。 如果设置了这个参数,control plane将会为每一个节点自动分配CIDRs。
--service-cidr string     缺省值: "10.96.0.0/12"
## 为service的虚拟IP地址另外指定IP地址段
--service-dns-domain string     缺省值: "cluster.local"
## 为services另外指定域名, 例如: "myorg.internal".
--skip-token-print
## 不打印出由 `kubeadm init` 命令生成的默认令牌。
--token string
## 这个令牌用于建立主从节点间的双向受信链接。格式为 [a-z0-9]{6}\.[a-z0-9]{16} - 示例: abcdef.0123456789abcdef
--token-ttl duration     缺省值: 24h0m0s
## 令牌被自动删除前的可用时长 (示例: 1s, 2m, 3h). 如果设置为 '0', 令牌将永不过期。
7. 初始化master节点

首先修改master的主机名,否则后面节点加入集群以后修改名字会非常麻烦

hostnamectl --static set-hostname k8s-master
hostname $hostname

初始化master节点需要拉取的镜像有

  • kube-proxy
  • kube-apiserver
  • kube-scheduler
  • kube-controller-manager
  • pause
  • coredns
  • etcd

由于这些镜像的地址在国外,访问受限,所以需要在命令中使用--image-repository添加国内镜像源

sudo kubeadm init --kubernetes-version=v1.18.3 \
 --pod-network-cidr=10.244.0.0/16 \
 --apiserver-advertise-address=[your_ip_addr] \
 --image-repository registry.aliyuncs.com/google_containers

其中[your_ip_addr]可以使用ip addr查看ens33字段获得。
如果ip地址填写错误,会产生k8s Initial timeout of 40s passed这个错误。

安装成功以后,会出现这个画面
在这里插入图片描述
按照提示,继续操作

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

这样就在Master上安装了Kubernetes,但是在集群内还是没哟可用的工作节点Node,并缺乏对容器网络的配置。这里需要注意的是kubeadm init命令执行完成后几行提示信息,其中包括了加入节点的指令kubeadm join和所需的Token
此时,可以使用命令kubectl get -n kube-system configmap验证一下ConfigMap:
在这里插入图片描述
使用指令kubectl get nodes验证集群,可以看到集群中现在已经有了一个节点:
在这里插入图片描述

8. 在集群中添加work节点

修改k8s-node1主机名

hostnamectl --static set-hostname k8s-node1
hostname $hostname

在k8s-node1主机中,执行下列命令,加入集群

sudo kubeadm join 192.168.199.128:6443 --token [your_token]

修改k8s-node2主机名

hostnamectl --static set-hostname k8s-node2
hostname $hostname

在k8s-node2主机中,执行下列命令,加入集群

kubeadm join 192.168.199.128:6443 --token [your_token]

在master节点中,使用kubectl get nodes查看集群状态
在这里插入图片描述
因为尚未安装网络插件,所以所有节点的STATUS都为NotReady。

9. 安装网络插件flannel

在master节点上安装flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.12.0/Documentation/kube-flannel.yml

安装完flannel之后,等待30s左右,在master上执行下列指令

kubectl get nodes

发现所有节点均处于ready状态
在这里插入图片描述

10. 集群状态检测

创建pod,验证集群

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

在这里插入图片描述在任意一个节点通过ip:port都能访问到部署的服务
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值