搭建k8s集群
引用 https://blog.piaoruiqing.com/2019/09/17/kubernetes-1-installation/
照着文章搭建k8s集群,写得挺好,记录一下自己的搭建方法和问题
环境
- 2个kvm虚拟机, 安装的centos7系统
- 两个虚拟机都配置了双网卡,eth0和eth1, eth0桥接宿主机的bridge, eth1 接入libvirt default NAT网络
- 官方推荐配置: CPU > 2,内存 > 2G
- eth1 的ip 分别为 192.168.122.61, 192.168.122.161
Master和Worker 共同步骤
需要在所有节点执行
修改hostname
编辑hostname
1 | vim /etc/hostname # 修改hostname |
配置host文件, 将所有节点都指定host
关闭防火墙
- systemctl disable –now firewalld
- 修改 /etc/seconfig, 将selinux 配置成disable
关闭 swap 分区
- swapoff -a
- 修改 /etc/fstab, 注释掉swap 记录
安装docker 配置镜像源
修改 /etc/docker/daemon.json 文件
1 | { |
添加k8s 软件源
如下添加的aliyun的镜像源
1 | cat <<EOF > /etc/yum.repos.d/kubernetes.repo |
安装k8s
安装组件
1 | yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes |
cat <
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl –system
1 |
|
[root@k8s-master ~]$ kubeadm config print init-defaults > kubeadm-init.yaml
1 | 得到 kubeadm-init.yaml 文件 |
下载k8s的组件镜像
1 | kubeadm config images pull --config kubeadm-init.yaml |
初始化 k8s
1 | kubeadm init --config kubeadm-init.yaml |
执行无误后,得到worker 节点加入集群的命令
1 | ... |
记录这个命令, 丢失的话也可以重新执行 kubeadmin create token
找回
配置普通用户执行kubectl 命令
用普通用户执行一下命令, 这样普通用户也能管理集群
1 | mkdir -p $HOME/.kube |
查看Master 节点状态
可见,Master节点未就绪,这是因为还没安装网络组件
1 | [root@k8s-master kubernetes]$ kubectl get node |
配置网络
下载calico 描述文件
wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml修改calico 描述文件里的serviceSubnet,修改为跟kubeadmin-init.yaml一致
1
2cat kubeadm-init.yaml | grep serviceSubnet:
serviceSubnet: 10.96.0.0/12
注意
- calico 的地址必须和 kubeadm-init.yaml 保持一致, kubeadm-init.yaml 默认为
serviceSubnet: 10.96.0.0/12
, 而calico的默认地址为192.168.0.0/16
, 所以要么修改kubeadmin-init.yaml, 要么修改calico.yaml。 - 这里的
Subnet
不能涵盖到主机的地址范围即不能包含192.168.122.0/24
安装calico
1 | kubectl apply -f calico.yaml |
查看Master节点
当calico 安装好了, 可以发现Master 节点变为就绪, 至此Master 节点就配置好了
1 | [root@k8s-master ~]$ kubectl get node |
安装dashboard
之前的步骤安装好了Master节点, 可选择安装dashboard,通过网页来管理集群
步骤很简单, 先下载dashboard, 再安装
1 | [root@k8s-master ~]$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml |
创建dashboard 用户
必须创建用户,然后获取token,才能在集群外访问, 否则必须在Master 的localhost 访问dashboard。
以下是创建用户的描述文件, 注意namespace, 例如官方的例子是 dashboard, 这样生成的token 不一样
执行安装用户 kubectl apply -f dashboard-adminuser.yaml
1 | # dashboard-adminuser.yaml |
创建证书, k8s 不允许远程使用http,所以需要用证书访问dashboard
1 | [root@k8s-master ~]$ grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt |
将生成的 kubecfg.p12
文件导入到集群外的主机,即kvm宿主机上
1 | scp root@10.33.30.92:/root/.kube/kubecfg.p12 ./ |
在宿主机上使用chrome 的高级功能里可以导入证书
重启chrome 登录后登录
1 | https://192.168.122.61:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login |
打开网页后选择输入token, token通过在Master 节点执行一下命令生成, 注意参数 -n kube-system, 需要跟创建用户时的namespace保持一致
1 | kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') |
复制token 到网页上,就能登录Dashboard
Worker节点加入集群
直接在worker节点执行
1 | kubeadm join 10.33.30.92:6443 --token abcdef.0123456789abcdef \ |
然后到Master 节点执行以下命令, 这里Name 显示了k8s-worker是因为我们在Hosts文件里指定了ip,所以k8s自动识别到了,否则会显示节点ip
1 | [root@k8s-master ~]$ kubectl get node |
至此集群搭建完毕
遇到问题
- 因为我的虚拟机配置的双网卡, 需要在calico.yaml 配网卡interface
1
2
3
4
5# Cluster type to identify the deployment type
- name: CLUSTER_TYPE
value: "k8s,bgp"
- name: IP_AUTODETECTION_METHOD
value: "interface=eth1"