K8s集群搭建

Kubernetes是目前最火的容器编排工具,其安装部署有很多种方式,比如可以通过直接编译二进制文件的方式,或者通过kubeadm的方式,以及使用目前很火的使用rancher的方式等。今天这里来介绍一下使用kubeadm的方式进行安装。我这里使用的操作系统为ubuntu16.04,这个集群由1个Master和2个Node节点组成

一、安装kubeadm和Docker

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

cat <<EOF> /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

apt-get update

apt-get install -y docker.io kubeadm

二、部署Master节点

安装完成kubeadm后,就可以通过使用命令kubeadm init来直接安装Master节点了,但是也可以修改一些kubeadm的默认参数,使用yaml文件来安装和部署K8s。例如,配置文件(kubeadm.yaml)内容如下所示:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controllerManager:
    extraArgs:
        horizontal-pod-autoscaler-use-rest-clients: "true"
        horizontal-pod-autoscaler-sync-period: "10s"
        node-monitor-grace-period: "10s"
apiServer:
    extraArgs:
        runtime-config: "api/all=true"

使用上面的配置文件进行安装时,就需要使用--config参数:

kubeadm init --config kubeadm.yaml

直接使用上述命令进行部署的时候,由于GWF的关系,可能会出现无法拉取镜像的问题,要想解决这些问题,主要有两种方法:

  • 手动从docker hub上拉取镜像:用docker直接从docker hub上把相应的镜像pull下来,然后再重新打tag。
  • 直接修改kubeadm的配置文件

2.1 手动从Docker Hub上拉取需要的镜像

首先介绍一种比较复杂的方式

2.1.1 查看依赖的景象

K8s安装依赖的主要有pause等7个镜像(取决于具体的版本),想要查看所依赖的镜像及其版本号,可以使用如下命令进行查看:

$ kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.18.9
k8s.gcr.io/kube-controller-manager:v1.18.9
k8s.gcr.io/kube-scheduler:v1.18.9
k8s.gcr.io/kube-proxy:v1.18.9
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

2.1.2 拉取镜像

这里我选择了一个我比较喜欢的镜像gotok8s,因为都有MD5作为验证,所以也不必太过于担心安全性的问题:

docker pull gotok8s/kube-apiserver:v1.18.6
docker pull gotok8s/kube-proxy:v1.18.6
docker pull gotok8s/kube-controller-manager:v1.18.6
docker pull gotok8s/kube-scheduler:v1.18.6
docker pull gotok8s/pause:3.2
docker pull gotok8s/coredns:1.6.7
docker pull gotok8s/etcd:3.4.3-0

拉取上述镜像到本地后,就可以使用docker tag命令来修改上述镜像的名称了,其命令为:

docker tag <image_id> <new_tag>

2.2 直接修改Kubeadm的配置文件

上面的步骤比较繁琐,也可以直接修改刚才编写的kubeadm.yaml文件,在其最后添加一行,使其变为:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controllerManager:
    extraArgs:
        horizontal-pod-autoscaler-use-rest-clients: "true"
        horizontal-pod-autoscaler-sync-period: "10s"
        node-monitor-grace-period: "10s"
apiServer:
    extraArgs:
        runtime-config: "api/all=true"
kubernetesVersion: "v1.18.6"
imageRepository: docker.io/gotok8s

2.3 修改hosts文件

在hosts文件中添加如下内容:

127.0.0.1 master

2.4 安装网络插件

可选择的网络查件很多,我们这里使用了weave插件,其安装方法如下:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

因为各个组件的安装方法不尽相同,而且安装方法也在随时变化,建议在安装前还是要查看一下官网或者github的说明。

安装完成网络插件后,系统会提示:

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

以及Work节点加入K8s的方法:

kubeadm join 192.168.32.98:6443 --token x1gr7l.dh278sujy91c8jvg \
    --discovery-token-ca-cert-hash sha256:21e1d7145514212060361a120a5811017f647c1ab2236ba24b44c61f4d10c387

2.5 其他注意事项

2.5.1 关闭swap

在K8s中要求必须关闭swap分区,因此需要执行:

swapoff -a

同时注释掉/etc/fstab中与swap相关的分区信息

2.5.2 coredns CrashLoopBackOff错误

要解决这个问题,主要参考了这篇文章:

https://linuxroutes.com/resolution-kube-system-coredns-crashloopbackoff-error/

具体做法如下:

  • kubectl -n kube-system edit configmap coredns

  • 在打开的配置文件中,找到loop这一行,并将其注释掉

  • 删除掉含有core-dns的pods:

    kubectl -n kube-system delete pod -l k8s-app=kube-dns
    

2.5.3 kube-proxy-***** ImagePullBackOff

这个我弄了好久,终于搞清楚了,原因是在work node上也要拉取k8s.gcr.io/kube-proxy的镜像

三、部署Work节点

部署Work节点就比较简单了,只需要完成以下几个步骤:

  1. 按照一中的方法,安装Docker和Kubeadm
  2. 按照2.4的提示,执行
kubeadm join
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354