kubeadm部署k8s集群

环境准备

这里使用Parallels Desktop 新建三个虚拟机,网络配置使用共享网络,确保三个主机有三个不同的网卡MAC地址,确保三个虚拟机之间可以互相ping通。三个虚拟机配置如下

主机名 IP
master1 192.168.1.27
node1 192.168.1.28
node2 192.168.1.29

配置root密码,修改主机名

su passwd root
vim /etc/hostname

配置master的本地DNS

[root@master1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.27 hongyi.master1.com master1
192.168.1.28 hongyi.node1.com node1
192.168.1.29 hongyi.node2.com node2

永久关闭swap

free -h
swapoff -a
// 修改/etc/fstab配置文件,注释掉swap的挂载

配置SELinux和firewalld

[root@master1 ~] sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 修改配置永久生效,需重启
[root@master1 ~]# setenforce 0
#关闭防火墙
[root@master1 ~]# systemctl stop firewalld
[root@master1 ~]# systemctl disable  firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

yum仓库配置

由于需要下载相关镜像,这里使用阿里云的镜像仓库
配置docker-ce的镜像仓库

[root@master1 yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master1 yum.repos.d]# touch kubenetes.repo
[root@master1 yum.repos.d]# vim kubenetes.repo 
[root@master1 yum.repos.d]# cat kubenetes.repo 
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

将两个仓库配置拷贝到node节点

scp ./docker-ce.repo  node2:/etc/yum.repos.d/docker-ce.repo
scp ./kubenetes.repo  node1:/etc/yum.repos.d/kubenetes.repo

Master节点配置

master需要安装的组件包括

  • docker-ce
  • kubeadm
  • kubectl
  • kubelet

安装组件,并启动docker

yum install kubeadm-1.15.2 kubectl-1.15.2 kubelet-1.15.2  docker-ce  -y
systemctl start docker
systemctl enable docker
docker info

由于墙的原因,这里我们先使用脚本准备需要的镜像,pull下来之后重新tag

[parallels@master1 ~]$ cat /dockerpull.sh 
#!/bin/bash
echo "Hello World !"
#根据上面报错的提示选择相应的版本
docker pull mirrorgooglecontainers/kube-apiserver:v1.15.2
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.2-beta.0
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.2-beta.0
docker pull mirrorgooglecontainers/kube-proxy:v1.15.2
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1 
#改tag
docker tag mirrorgooglecontainers/kube-apiserver:v1.15.2 k8s.gcr.io/kube-apiserver:v1.15.2
docker tag mirrorgooglecontainers/kube-controller-manager:v1.15.2-beta.0 k8s.gcr.io/kube-controller-manager:v1.15.2
docker tag mirrorgooglecontainers/kube-scheduler:v1.15.2-beta.0 k8s.gcr.io/kube-scheduler:v1.15.2
docker tag mirrorgooglecontainers/kube-proxy:v1.15.2 k8s.gcr.io/kube-proxy:v1.15.2
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
#清理镜像
docker rmi mirrorgooglecontainers/kube-apiserver:v1.15.2
docker rmi mirrorgooglecontainers/kube-controller-manager:v1.15.2-beta.0
docker rmi mirrorgooglecontainers/kube-scheduler:v1.15.2-beta.0
docker rmi mirrorgooglecontainers/kube-proxy:v1.15.2
docker rmi mirrorgooglecontainers/pause:3.1
docker rmi mirrorgooglecontainers/etcd:3.3.10
docker rmi coredns/coredns:1.3.1 

查看一下镜像

[root@master1 yum.repos.d]# docker image ls
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                v1.15.2             167bbf6c9338        4 months ago        82.4MB
k8s.gcr.io/kube-apiserver            v1.15.2             34a53be6c9a7        4 months ago        207MB
k8s.gcr.io/kube-controller-manager   v1.15.2             575346c7506b        5 months ago        159MB
k8s.gcr.io/kube-scheduler            v1.15.2             38d61dd6e105        5 months ago        81.1MB
k8s.gcr.io/coredns                   1.3.1               eb516548c180        11 months ago       40.3MB
k8s.gcr.io/etcd                      3.3.10              2c4adeb21b4f        12 months ago       258MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        24 months ago       742kB

使用kubeadm init 初始化集群的control-plane

kubeadm init --kubernetes-version=v1.15.2  --pod-network-cidr=10.224.0.0/16  --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

在经过初始化一系列的phase之后,提示接下来的操作

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.27:6443 --token 8bzhtc.c97lhb44g0y7l4uy \
    --discovery-token-ca-cert-hash sha256:8dd9c308281a85175b2ef9106110c2a81e2b2374e230717d0882b04f31b9bc69 

执行提示的指令

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
// 由于本来就是用root用户操作的,第三句可以省去

接着命令提示我们去设置网络,先查看下节点的状态,这里的NotReady表明网络不可用

[root@master1 yum.repos.d]# kubectl get nodes
NAME      STATUS     ROLES    AGE     VERSION
master1   NotReady   master   6m20s   v1.15.2

这里使用flannel作为网络的支持组件,手动部署flannel

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

如果在虚拟机里下载不下来这个yml文件,可以先在宿主机下好之后拷贝到虚拟机中。

[root@master1 yum.repos.d]# kubectl apply -f /kube-flannel.yml 
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created

稍等片刻,master节点的状态就会变为Ready

[root@master1 yum.repos.d]# kubectl get nodes
NAME      STATUS   ROLES    AGE   VERSION
master1   Ready    master   12m   v1.15.2

加入Node节点

Node节点需要手动安装的组件包括

  • kubeadm
  • kubelet
  • docker-ce
[root@node1 ~]# yum install docker-ce kubelet-1.15.2 kubeadm-1.15.2  -y
[root@node1 ~]# systemctl start docker
[root@node1 ~]# systemctl enable docker
[root@node1 ~]# systemctl start kubelet
[root@node1 ~]# systemctl enable  kubelet

在join集群之前,由于墙的原因,node节点也需要准备好相关镜像,node节点使用这个dockerpull.sh脚本拉取镜像

[root@centos-7-k8s-node1 ~]# cat /dockerpull.sh 
#!/bin/bash
docker pull mirrorgooglecontainers/kube-proxy:v1.15.2
docker pull mirrorgooglecontainers/pause:3.1
#改tag
docker tag mirrorgooglecontainers/kube-proxy:v1.15.2 k8s.gcr.io/kube-proxy:v1.15.2
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
#清理镜像
docker rmi mirrorgooglecontainers/kube-proxy:v1.15.2
docker rmi mirrorgooglecontainers/pause:3.1

镜像准备好之后,使用kubeadm join加入集群(master执行kuebadm init时提示的指令)

kubeadm join 192.168.1.27:6443 --token 8bzhtc.c97lhb44g0y7l4uy \
    --discovery-token-ca-cert-hash sha256:8dd9c308281a85175b2ef9106110c2a81e2b2374e230717d0882b04f31b9bc69 

稍等片刻,等Node节点加入集群成功后,在master节点查看所有节点状态

NAME      STATUS   ROLES    AGE   VERSION
master1   Ready    master   40m   v1.15.2
node1     Ready    <none>   13m   v1.15.2
node2     Ready    <none>   47s   v1.15.2

[root@master1 yum.repos.d]# kubectl get pods -n kube-system
NAME                              READY   STATUS    RESTARTS   AGE
coredns-5c98db65d4-fstfc          1/1     Running   0          43m
coredns-5c98db65d4-wmqln          1/1     Running   0          43m
etcd-master1                      1/1     Running   0          42m
kube-apiserver-master1            1/1     Running   0          42m
kube-controller-manager-master1   1/1     Running   0          42m
kube-flannel-ds-amd64-rhw8v       1/1     Running   0          31m
kube-flannel-ds-amd64-wrts8       1/1     Running   0          3m41s
kube-flannel-ds-amd64-zmvdv       1/1     Running   0          15m
kube-proxy-9d2jq                  1/1     Running   0          15m
kube-proxy-l2kd8                  1/1     Running   0          3m41s
kube-proxy-sh8wp                  1/1     Running   0          43m
kube-scheduler-master1            1/1     Running   0          42m

至此,一个未安装任何应用的一个集群就部署完毕了。
have fun

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