k8s集群的部署

1. 实验环境

主机信息主机功能
server1(172.25.1.1)k8s集群的master节点
server2(172.25.1.2)k8s集群的worker节点1
server3(172.25.1.3)k8s集群的worker节点2

在server1、server2、server3上面安装docker服务,并且开启
docker安装请参考 https://blog.csdn.net/qq_36417677/article/details/105453788

记住:前提是装好docker的主机,保证实验环境干干净净

2.部署一个基本的k8s集群

master节点环境的安装

(1)配置yum仓库

先安装docker镜像,去阿里云官方镜像网站:https://opsx.alibaba.com/mirror找到docker-ce对应的linux centos系统repo配置文件,右击复制链接

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

接着再生成Kubernetes的仓库文件,创建并编辑kubernetes.repo。

[root@server1 yum.repos.d]# vim kubernetes.repo

[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1

写入以下内容,baseurl和gpgkey的路径可在阿里云官方镜像网站Kubernetes目录下找到。

创建完之后,获取当前系统有效的repolist

[root@serve1 yum.repos.d]# yum repolist

在这里插入图片描述
为了方便在node节点上安装,可以将这个两个配置文件通过scp命令复制到node节点服务器(server1,server2)上

[root@server1 yum.repos.d]# scp kubernetes.repo server2:/etc/yum.repos.d/
[root@server1 yum.repos.d]# scp kubernetes.repo server3:/etc/yum.repos.d/

(2)安装各组件

kuberctl:API Server的命令行客户端

[root@server1 yum.repos.d]# yum install  kubelet kubeadm kubectl

可以看到加载到的是哪些版本的包
在这里插入图片描述
安装报错:
在这里插入图片描述
解决方法:
将yum-key.gpg,rpm包的key下载到本地进行rpm --import导入

wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
rpm --import yum-key.gpg
rpm --import rpm-package-key.gpg

最后,就能安装成功

启动kubelet
此时,还不能启动kubelet,因为此时配置还不能,现在仅仅可以设置开机自启动

systemctl enable --now  kubelet

同时还要确保以下两个参数值为1。通过网桥转发的IP数据包会iptables规则过滤,而这两个选项将阻止过滤,Netfilter是默认情况下启用了桥梁,如果不阻止会导致严重的混乱
在这里插入图片描述
如果不是1需要修改为1

echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

通过

[root@server1 ~]# rpm -ql kubelet   #命令查看都安装了什么文件

在这里插入图片描述

需要禁止各个节点启用swap,如果启用了swap,那么kubelet就无法启动

[root@server1 ~]# swapoff -a && sysctl -w vm.swappiness=0
vm.swappiness = 0
[root@server1 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            769         305         104           5         359         312
Swap:             0           0           0

之后更改/etc/fstab文件将swap那一行注释掉即可实现永久关闭。

将docker的cgroup驱动更改为systemd

更改docker的daemon文件

[root@server1 ~]# vim /etc/docker/daemon.json 
[root@server1 ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://ioeo57w5.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

之后重启docker:

systemctl daemon-reload
systemctl restart docker

每个节点都需要设置:

[root@server1 docker]# scp daemon.json server2:/etc/docker/
daemon.json                                   100%  287   328.6KB/s   00:00    
[root@server1 docker]# scp daemon.json server3:/etc/docker/
daemon.json                                   100%  287   300.0KB/s   00:00 

(3)kubeadm init初始化

查看kubeadm init的帮助信息

[root@server1 ~]# kubeadm init --help

--image-repository string:这个用于指定从什么位置来拉取镜像(1.13版本才有的),默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers,也可以先将镜像下载下来放到私有仓库直接从私有仓库拉取。

--kubernetes-version string:指定kubenets版本号,默认值是stable-1,会导致从https://dl.k8s.io/release/stable-1.txt下载最新的版本号,我们可以将其指定为固定版本(最新版:v1.18.1)来跳过网络请求。

--apiserver-advertise-address 指明用 Master 的哪个 interface 与 Cluster
的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的interface。

--pod-network-cidr指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。

 [root@server1 ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.1 --pod-network-cidr=10.244.0.0/16

报错至少需要2核cpu
在这里插入图片描述
关机,添加CPU内核,再次执行

看到下面的输出就表示你的集群创建成功了:

......

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 172.25.1.1:6443 --token cmpyar.n4arbbq0i9irhmum \
    --discovery-token-ca-cert-hash sha256:542e77bad47c73c3336ce601ad9fe2078381ea8b04b95f377f46520296a79fe2

成功后注意最后一个命令,这个join命令可以用来添加节点。

如果初始化失败,请使用如下代码清除后重新初始化

kubeadm reset

配置kubectl

kubectl 是管理 Kubernetes Cluster 的命令行工具,前面我们已经在所有的节点安装了 kubectl。Master 初始化完成后需要做一些配置工作,然后 kubectl 就能使用了。

[root@server1 ~]# mkdir -p $HOME/.kube
[root@server1 ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@server1 ~]# chown $(id -u):$(id -g) $HOME/.kube/config

为了使用更便捷,启用 kubectl 命令的自动补全功能。

 [root@server1 ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc

现在kubectl可以使用了

[root@server1 ~]#  kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   
controller-manager   Healthy   ok   

第四步:安装pod网络

要让 Kubernetes Cluster 能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信。

Kubernetes 支持多种网络方案,这里我们先使用 flannel,后面还会讨论 Canal。

 [root@server1 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

每个节点启动kubelet

systemctl restart kubelet

等镜像下载完成以后,看到node的状态是ready了

 [root@server1 ~]# kubectl get nodes
NAME      STATUS   ROLES    AGE   VERSION
server1   Ready    master   18m   v1.18.1

此时,就可以看到pod信息了

[root@server1 ~]# kubectl get pods -n kube-system
NAME                              READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-8gzr5          1/1     Running   0          18m
coredns-7ff77c879f-dxst6          1/1     Running   0          18m
etcd-server1                      1/1     Running   1          18m
kube-apiserver-server1            1/1     Running   1          18m
kube-controller-manager-server1   1/1     Running   4          18m
kube-flannel-ds-amd64-wcqrh       1/1     Running   0          8m36s
kube-proxy-lzdn8                  1/1     Running   0          18m
kube-scheduler-server1            1/1     Running   4          18m

添加 node1 和 node2
第一步:环境准备

实验的准备之前都完成了

node节点关闭防火墙和selinux
禁用swap
解析主机名
启动内核功能
启动kubelet

只需要设置为开机自启动就可以了

systemctl enable kubelet

第二步:添加nodes

这里的–token 来自前面kubeadm init输出提示,如果当时没有记录下来可以通过kubeadm token list 查看。

在需要添加的节点运行:

kubeadm join 172.25.1.2:6443 --token rn816q.zj0crlasganmrzsr --discovery-token-ca-cert-hash sha256:e339e4dbf6bd1323c13e794760fff3cbeb7a3f6f42b71d4cb3cffdde72179903

第三步:查看nodes

根据上面最后一行的输出信息提示查看nodes

[root@server1 ~]# kubectl get nodes
NAME      STATUS     ROLES    AGE     VERSION
server1   Ready      master   38m     v1.18.1
server2   NotReady   <none>   2m41s   v1.18.1
server3   NotReady   <none>   2m10s   v1.18.1

这里其实需要等一会,这个server2 server3节点才会变成Ready状态,因为node节点需要下载四个镜像flannel coredns kube-proxy pause

过了一会查看节点状态

[root@server1 ~]# kubectl get nodes
NAME      STATUS   ROLES    AGE   VERSION
server1   Ready    master   47m   v1.18.1
server2   Ready    <none>   11m   v1.18.1
server3   Ready    <none>   11m   v1.18.1

补充:移除NODE节点的方法
第一步:先将节点设置为维护模式(server2是节点名称)

[root@server1 ~]# kubectl drain server2 --delete-local-data --force --ignore-daemonsets

第二步:然后删除节点

[root@server1 ~]# kubectl delete node server2

第三步:查看节点

发现server2节点已经被删除了

[root@server1 ~]# kubectl get nodes
NAME      STATUS   ROLES    AGE   VERSION
server1   Ready    master   47m   v1.18.1
server3   Ready    <none>   11m   v1.18.1

添加已删除节点
如果这个时候再想添加进来这个node,需要执行两步操作

第一步:停掉kubelet(需要添加进来的节点操作)

[root@server2 ~]# systemctl stop kubelet

第二步:删除相关文件

[root@server2 ~]# rm -rf /etc/kubernetes/*

第三步:添加节点

[root@server2 ~]# kubeadm join 172.25.63.1:6443 --token cmpyar.n4arbbq0i9irhmum     --discovery-token-ca-cert-hash sha256:542e77bad47c73c3336ce601ad9fe2078381ea8b04b95f377f46520296a79fe2

第四步:查看节点

 kubectl get nodes
[root@server1 ~]# kubectl get nodes
NAME      STATUS   ROLES    AGE   VERSION
server1   Ready    master   47m   v1.18.1
server2   Ready    <none>   11m   v1.18.1
server3   Ready    <none>   11m   v1.18.1

忘掉token再次添加进k8s集群
第一步:主节点执行命令

在主控节点,获取token:

[root@server1 ~]# kubeadm token list
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
cmpyar.n4arbbq0i9irhmum   23h         2020-04-18T20:47:06+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

第二步: 获取ca证书sha256编码hash值

在主控节点

 [root@server1 ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
542e77bad47c73c3336ce601ad9fe2078381ea8b04b95f377f46520296a79fe2

第三步:从节点执行如下的命令

[root@server2 ~]# systemctl stop kubelet

第四步:删除相关文件

[root@server2 ~]# rm -rf /etc/kubernetes/*

第五步:加入集群

指定主节点IP,端口是6443

在生成的证书前有sha256:

[root@server2 ~]# kubeadm join 172.25.63.1:6443 --token cmpyar.n4arbbq0i9irhmum --discovery-token-ca-cert-hash sha256:542e77bad47c73c3336ce601ad9fe2078381ea8b04b95f377f46520296a79fe2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值