前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s + Docker 搭建实录和问题总结

k8s + Docker 搭建实录和问题总结

原创
作者头像
字节流
发布2019-09-27 17:39:04
1.3K0
发布2019-09-27 17:39:04
举报
文章被收录于专栏:容器化技术

最近看了<<kubernetes 权威指南>> 这本书,也想着照着书中范例搭建一个k8s集群。书中的例子是在单机跑起来的,也有点年代了,完全照着书中范例配置遇到了不少问题,搭建前前后后花了好几天的休息时间才弄好。 因此把过程中的问题整理出来,方便后续重新搭建的时候能够有坑可循。自己也想过搞个一键搭建脚本,但是作为k8s入门,还是需要自己亲手一步步操作过来,才能有所收获。

k8s权威指南书里介绍的是如何在单机上搭建k8s的,比较简单,我这边搭建的是集群模式。 将k8s的master以及node分别部署在不同的机子上。

其中master的进程如下所述:

master进程
master进程

node上的进程如下所述:

node进程
node进程

搭建环境注意项:

  1. master 如果不用来部署node的话,至少是1个CPU 1GB的硬件配置。
  2. node CPU 1核,但是内存至少要2G以上,否则会导致node节点起的容器频繁诱发OOMKill,和频繁的swap导致结点卡顿无法操作

下面是在Centos 7.5 版本下搭建的具体步骤:

关闭防火墙,关闭senlinux。 防火墙会导致后面对外暴露服务的时候拦截掉端口流量, master和node都得设置下

代码语言:javascript
复制
# systemctl stop firewalld 
# systemctl disable firewalld
# setenforce 0
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux

搭建master

代码语言:javascript
复制
# yum -y install etcd kubernetes

配置etcd 和apiserver

代码语言:javascript
复制
#vim /etc/etcd/etcd.conf
  
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
代码语言:javascript
复制
vim /etc/kubernetes/apiserver
  
KUBE_API_ADDRESS="--address=0.0.0.0"KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet_port=10250"
KUBE_ETCD_SERVERS="--etcd_servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

启动master上的服务进程:

代码语言:shell
复制
#!/bin/sh

 for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler;
 do
  systemctl restart $SERVICES
  systemctl enable $SERVICES
  systemctl status $SERVICES
 done

设置etcd网络:

代码语言:javascript
复制
etcdctl set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'

到这里,master的配置就完成

接下来进行node的配置

按照必要的包

代码语言:javascript
复制
# yum -y install flannel kubernetes

设置node连接master的配置

代码语言:javascript
复制
vim /etc/kubernetes/config

KUBE_MASTER="--master=http://${master ip}:8080"
KUBE_ETCD_SERVERS="--etcd_servers=http://${master ip}:2379"

这里需要将${master ip} 替换成master的ip
代码语言:javascript
复制
vim /etc/kubernetes/kubelet

KUBELET_PORT="--port=10250"
# change the hostname to this host’s IP address 
KUBELET_HOSTNAME="--hostname_override=${local ip}"
KUBELET_API_SERVER="--api_servers=http://${master ip}:8080"
KUBELET_ARGS=""

这里需要将${local ip} 替换为node本机ip
${master ip} 替换为master的ip
代码语言:javascript
复制
#vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://${master ip}:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network" 

这里需要将${master ip} 替换成master的ip 

在console执行以下指令清理docker0网络配置:

代码语言:javascript
复制
 ip link delete docker0

启动node结点的服务

代码语言:shell
复制
#!/bin/sh
 for SERVICES in flanneld kube-proxy kubelet docker;
do
 systemctl restart $SERVICES
 systemctl enable $SERVICES
 systemctl status $SERVICES
done

这个时候,在master上执行kubectl get nodes。如果配置成功即可查看到如下信息

代码语言:javascript
复制
[root@VM_0_3_centos k8s]# kubectl get nodes
NAME            STATUS    AGE
49.235.XX.XX   Ready     9d
[root@VM_0_3_centos k8s]# 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档