k8s集群搭建

个人笔记,仅供参考,他人按此步骤不一定能顺利搭建

1、配置阿里云docker源,安装组件,安装docker-ce(所有节点)

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce-19.03.14
2、配置阿里云kubernetes源,安装kubeadm,kubectl,kubelet(kubeadm,kubelet在work节点,kubectl在master节点)

[root@master manifests]# cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

yum install -y kubelet
yum install -y kubectl
yum install -y kubeadm
3、安装完成后,我们还需要对docker进行配置,因为用yum源的方式安装的kubelet生成的配置文件将参数--cgroup-driver改成了systemd,而 docker 的cgroup-driver是cgroupfs,这二者必须一致才行,我们可以通过docker info命令查看:

[root@master manifests]# docker info |grep Cgroup
Cgroup Driver: systemd
修改

[root@master manifests]# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
4、关闭swap

swapoff -a
5、在master节点提前下载好k8s组件镜像,再使用docker tag重命名,因为K8s默认是从grc.io下载镜像的,而我本地无法访问
查看需要的镜像

[root@master ~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.20.2
k8s.gcr.io/kube-controller-manager:v1.20.2
k8s.gcr.io/kube-scheduler:v1.20.2
k8s.gcr.io/kube-proxy:v1.20.2
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
从dockerhub可以下载的地址下载镜像

docker pull aiotceo/kube-apiserver:v1.20.2
docker pull aiotceo/kube-controller-manager:v1.20.2
docker pull aiotceo/kube-proxy:v1.20.2
docker pull aiotceo/kube-scheduler:v1.20.2
docker pull aiotceo/pause:3.2
docker pull aiotceo/coredns:1.7.0
docker pull aiotceo/etcd:3.4.13-alpine
docker pull aiotceo/etcd:3.4.13-ubuntu
重命名

1109 docker tag docker.io/aiotceo/kube-apiserver:v1.20.2 k8s.gcr.io/kube-apiserver:v1.20.2
1111 docker tag aiotceo/kube-proxy:v1.20.2 k8s.gcr.io/kube-proxy:v1.20.2
1112 docker tag aiotceo/kube-scheduler:v1.20.2 k8s.gcr.io/kube-scheduler:v1.20.2
1113 docker tag docker.io/aiotceo/pause:3.2 k8s.gcr.io/pause:3.2
1114 docker tag docker.io/aiotceo/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
1115 docker tag docker.io/aiotceo/etcd:3.4.13-ubuntu k8s.gcr.io/etcd:3.4.13-0
6、集群初始化
kubeadm init --kubernetes-version=v1.20.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.1.1.206
初始化完成后你会看到下面这样的提示:

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 10.1.1.206:6443 --token hr8pxx.x7hnskwkz7dp20tq
--discovery-token-ca-cert-hash sha256:a894653ab32c92d89a4a43f6486bbe7cfbbeee1e601b5b3a99ffdcd68367737b
意思说你可以使用kubeadm join加入本集群,但是需要安装网络插件

此时使用kubectl get cs查看集群状态,会有以下提示:

[root@master manifests]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
scheduler Unhealthy Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
controller-manager Unhealthy Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
etcd-0 Healthy {"health":"true"}
这是因为集群初始化默认从官方下载的kube-scheduler和kube-controller-manaer配置文件里面的port端口为0,将--port=0注释掉,然后重启Kubelet

...
spec:
containers:

  • command:
    • kube-scheduler
    • --authentication-kubeconfig=/etc/kubernetes/scheduler.conf
    • --authorization-kubeconfig=/etc/kubernetes/scheduler.conf
    • --bind-address=127.0.0.1
    • --kubeconfig=/etc/kubernetes/scheduler.conf
    • --leader-elect=true

- --port=0

image: k8s.gcr.io/kube-scheduler:v1.20.2

...

systemctl restart kubelet
此时再查看cs,状态都为ready

[root@master manifests]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
7、安装网络插件
下载flannel配置文件,同样需要提前在worker节点下载kube-proxy镜像,并重命名

wget https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml
注意,需要在浏览器里面直接打开然后复制内容,再创建kube-flannel.yml,否则用kubectl apply -f 这个链接会报错
kubectl apply -f kube-flannel.yml
查看

kubectl -n kube-system get pod
[root@master ~]# kubectl -n kube-system get pod
NAME READY STATUS RESTARTS AGE
etcd-master 1/1 Running 0 71m
kube-apiserver-master 1/1 Running 0 71m
kube-controller-manager-master 1/1 Running 0 71m
kube-flannel-ds-5xsbn 1/1 Running 0 34m
kube-flannel-ds-9dxlm 1/1 Running 0 34m
kube-flannel-ds-xt564 1/1 Running 0 35m
8、工作节点加入集群
分别在工作节点使用上面初始化的生成的token和hash值加入集群

kubeadm join 10.1.1.206:6443 --token hr8pxx.x7hnskwkz7dp20tq
--discovery-token-ca-cert-hash sha256:a894653ab32c92d89a4a43f6486bbe7cfbbeee1e601b5b3a99ffdcd68367737b

vim /etc/profile
在底部增加新的环境变量 export KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile

把主节点文件拷贝到node节点
scp -r /etc/kubernetes/admin.conf root@200.200.4.151:/etc/kubernetes/admin.conf

给从节点打标签
kubectl label node k8s-node-151 node-role.kubernetes.io/node=

[root@master ~]# kubectl get csr
NAME AGE SIGNERNAME REQUESTOR CONDITION
csr-c4tqr 78m kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:hr8pxx Approved,Issued
csr-pdsnh 78m kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:hr8pxx Approved,Issued
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 86m v1.20.2
node01 Ready <none> 78m v1.20.2
node02 Ready <none> 78m v1.20.2
9、创建coredns
提前将镜像下载好,并重命名

docker pull aiotceo/coredns:1.7.0
docker tag docker.io/aiotceo/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
[root@master ~]# kubectl -n kube-system get pod
NAME READY STATUS RESTARTS AGE
coredns-74ff55c5b-ckd4v 1/1 Running 0 90m
coredns-74ff55c5b-pgw2h 1/1 Running 0 90m
PS:安装过程中如果有出错,使用以下命令重置,并且重新初始化,worker节点也一样

kubeadm reset
systemctl daemon-reload
systemctl restart kubelet
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

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

推荐阅读更多精彩内容