使用二进制安装包部署kubernetes(详细精讲版)

5 篇文章 0 订阅

 

使用二进制安装包部署kubernetes(详细精讲版)

  • 本次安装主要是用来学习kubernetes安装的相关过程及组件的配置,若用于企业实践可根据具体需要在节点添加相应的组件
  • 上一篇文章详细讲解了如何在物理机上安装centos操作系统(小白可直接按照文章内容直接完成安装,需要改的参数会具体指出)
  • 如果是新安装的操作系统,可以安装下列组件,方便操作(其它可跳过第一阶段,直接看准备工作)
  • 过程中有一些命令忘记加$或#(不好意思),放在bash输入框中的都是命令,可复制$或#后的直接使用
  • 虚拟机上安装提前准备2-3台centos系统的虚拟机即可,一台master,两台node

1,安装工具(已安装可跳过)(3台都需要)

安装wget

yum -y install wget

yum换源(换源后yum安装速度更快)

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

保存更改

yum makecache

安装C和C++环境

yum -y install gcc
yum -y install gcc-c++

安装vim

yum install vim -y

安装工具

yum install net-tools

更新组件(包括内核)(后面可能有些内核原因引起的问题)

yum update

2,准备工作(三台都需要)

修改 /etc/hostname 文件,添加主机名和 IP 的对应关系:(有node2,将node2也加入即可)

$ vim /etc/hosts
192.168.10.108 kube-master
192.168.10.109 kube-node1

在每台机器上关闭防火墙,关闭服务,并设为开机不自启

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

清空防火墙规则

$ sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
$ sudo iptables -P FORWARD ACCEPT

1、如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为false 来忽略 swap on),故需要在每台机器上关闭 swap 分区:

$ sudo swapoff -a

2、为了防止开机自动挂载 swap 分区,可以注释 /etc/fstab 中相应的条目:

$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

1、关闭 SELinux,否则后续 K8S 挂载目录时可能报错 Permission denied :

$ sudo setenforce 0

2、修改配置文件,永久生效;

$ grep SELINUX /etc/selinux/config
SELINUX=disabled

这一步也可以vi /etc/selinux/config(修改SELINUX=disabled)

3,kubernetes准备工作(dockers可只在node上安装)

安装docker(可根据具体需要安装dockers,node节点一般都安装dockers用于实践应用)
官方文档https://docs.docker.com/engine/install/centos/

移除电脑上原有的dockers

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

注:如果报没有文件,说明原来没有dockers,直接进行下面的即可

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

可选:启用每晚或测试存储库。
这些存储库包含在docker.repo上面的文件中,但默认情况下处于禁用状态。您可以在稳定存储库旁边启用它们。以下命令启用每晚存储库。

$ sudo yum-config-manager --enable docker-ce-nightly

要启用测试通道,请运行以下命令:

$ sudo yum-config-manager --enable docker-ce-test

您可以通过运行带有标志的命令来禁用每晚或测试存储库 。要重新启用它,请使用该标志。以下命令禁用夜间存储库。

yum-config-manager--disable--enable
$ sudo yum-config-manager --disable docker-ce-nightly

启动Docker。

$ sudo systemctl start docker

查看dockers状态

$ sudo systemctl status docker

通过运行hello-world 映像来验证是否正确安装了Docker Engine 。

$ sudo docker run hello-world

如果运行报错,说明没有镜像仓库(设置镜像加速也可以在后面在做,不影响kubernetes的安装)
设置镜像加速(可以用来在k8s上部署相关的组件(mysql,tomcat等),不配置话pull镜像会出现超时)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://867s285f.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

我用的自己的阿里云仓库(你可以自己在阿里云申请)
docker拉取Mysql镜像
docker查询可拉取的MySql镜像版本

docker search mysql

整体规划

主机名IP地址角色
kube-master虚拟机/电脑IPmaster
kube-node1虚拟机/电脑IPnode1
kube-node2虚拟机/电脑IPnode2

组件说明(除可选外,其它组件必须安装,建议node都安装dockers)

角色组件备注
masterdocker、etcd、api-server、scheduler、controller-managerdockers(可选)
node1docker、etcd、kubelet、proxyetcd,dockers(可选)
node2docker、etcd、kubelet、proxyetcd,dockers(可选)

4,使用二进制方式部署k8s的Master节点(master上安装)

安装顺序etcd--apiserver--controller-manager--scheduler

1,安装etcd(etcd必须实现安装,etcd可运行后再安装其它组件,不然后面都会报错)

yum安装etcd
一键安装etcd

yum install etcd -y

设置开机自启动

systemctl enable etcd


开启etcd

systemctl start etcd

查看etcd的状态

systemctl status etcd

(后面的我就不具体解释相关的密令了,和上面的相同)
也可以使用二进制安装

二进制安装

先下载etcd的二进制文件

https://github.com/coreos/etcd/releases下载etcd二进制文件,将etcd和etcdctl文件复制到/usr/bin目录。

后面的二进制文件都放在/usr/bin目录下(可根据具体需要设置启动目录)

配置systemd服务文件:/usr/lib/systemd/system/etcd.service

配置和启动etcd服务:

# more etcd.service

[Unit]

Description=Etcd Server

After=network.target

[Service]

Type=simple

EnvironmentFile=-/etc/etcd/etcd.conf

WorkingDirectory=/var/lib/etcd/

ExecStart=/usr/bin/etcd

Restart=on-failure

[Install]

WantedBy=multi-user.target
[root@k8s-master ~]# ls

anaconda-ks.cfg  etcd-v3.3.5-linux-amd64  etcd-v3.3.5-linux-amd64.tar.gz

[root@k8s-master ~]# cd etcd-v3.3.5-linux-amd64

[root@k8s-master etcd-v3.3.5-linux-amd64]# ls

Documentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md

[root@k8s-master etcd-v3.3.5-linux-amd64]# mv etcd etcdctl /usr/bin

[root@k8s-master etcd-v3.3.5-linux-amd64]# systemctl daemon-reload

[root@k8s-master etcd-v3.3.5-linux-amd64]# systemctl enable etcd.service

Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.

[root@k8s-master etcd-v3.3.5-linux-amd64]# mkdir -p /var/lib/etcd/

[root@k8s-master etcd-v3.3.5-linux-amd64]# systemctl start etcd.service

[root@k8s-master etcd-v3.3.5-linux-amd64]# etcdctl cluster-health

member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379

cluster is healthy

二进制安装etcd的内容是参考的其它文档,具体可看https://blog.csdn.net/watermelonbig/article/details/80441654?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase

2,安装apiserver

kube-apiserver、kube-scheduler、kube-controller-manager、kubelet、kube-proxy所需要的二进制文件我放在评论区,也可以在网上自行下载

如果下载的是压缩文件,解压后放在/etc/bin/下,我放置的是二进制可执行文件,直接放入/etc/bin/即可

将解压后kube-apiserver、kube-controller-manager、kube-scheduler以及管理要使用的kubectl二进制命令文件放到/usr/bin目录,即完成这几个服务的安装。

这是文档二进制文件

文件没有执行权限,需要先添加执行权限

修改文件的权限,设置为可执行

chmod +x /etc/bin/kube*

ls -lh(查看文件权限)

现在没有执行权限

添加执行权限后

 

已经有可执行权限了

接下来对api服务进行必要的配置。
touch /usr/lib/systemd/system/kube-apiserver.service(root用户可以直接编辑配置文件,如果不是root用户,需要chmod 774 /usr/lib/systemd/system/kube-apiserver.service修改权限,后面相同,不一一说明)

touch /usr/lib/systemd/system/kube-apiserver.service
chmod 774 /usr/lib/systemd/system/kube-apiserver.service

配置systemd服务文件:/usr/lib/systemd/system/kube-apiserver.service
编辑内容如下vi /usr/lib/systemd/system/kube-apiserver.service编辑如下内容(后续直接给出的是文件的内容,自己在配置文件下编辑添加)

vi /usr/lib/systemd/system/kube-apiserver.service

more是查看命令(具体看Linux相关命令),操作过程是vi编辑文件,将下列内容(如下more看到的内容)粘贴进配置文件即可

(也就是[Unit]~~) 

# more /usr/lib/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
After=etcd.service
Wants=etcd.service
[Service]
EnvironmentFile=/etc/kubernetes/kube-apiserver.conf
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
Type=notify
[Install]
WantedBy=multi-user.target

配置文件:

# mkdir -p /etc/kubernetes

注释:EnvironmentFile=/etc/kubernetes/apiserver(这里要和下面配置文件的地址一样)
ExecStart=/usr/bin/kube-apiserver(上一步如果未加执行权限会报错)

注意:上面的创建配置文件EnvironmentFile的目录位置一定要和下面配置文件的位置一致,并且配置文件的名字和上面给出的一样(不一样会报错),同样ExecStart的目录和文件名字也可kube-apiserver二进制文件位置和名字相同,后面不一一说明

# touch /etc/kubernetes/kube-apiserver.conf
# more /etc/kubernetes/kube-apiserver.conf
KUBE_API_ARGS="--storage-backend=etcd3 --etcd-servers=http://127.0.0.1:2379  --insecure-bind-address=0.0.0.0  --insecure-port=8080 --service-cluster-ip-range=10.10.10.0/24 --service-node-port-range=1-65535 --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,DefaultStorageClass,ResourceQuota --logtostderr=true --log-dir=/var/log/kubernetes --v=2"

创建日志的目录,不然会报错

mkdir /var/log/kubernetes

有些字段可能新的版本不支持(如:--etcd-servers,可以通过--kubeconfig解决,后续会给出事例,在kubelet配置中)
kube-apiserver服务
开启kube-apiserer

systemctl daemon-reload
systemctl enable kube-apiserver
systemctl start kube-apiserver
systemctl status kube-apiserver

active表示运行成功,如果无法运行,可以查看journalctl -xe查看报信息,也可以查看vim /var/log/message系统日志,查看报错信息,并修改相关错误,一般的报错会在下一篇文章给出,可以参考修改

注释:组件组件相互依赖,etcd成功运行后才能运行kube-apiserver,才能搭建kube-controller-manager
3、kube-controller-manager服务
kube-controller-manager服务依赖于kube-apiserver服务:

touch /usr/lib/systemd/system/kube-controller-manager.service
vi /usr/lib/systemd/system/kube-controller-manager.service

配置systemd服务文件:/usr/lib/systemd/system/kube-controller-manager.service

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=-/etc/kubernetes/kube-controller-manager.conf
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

配置文件:

touch  /etc/kubernetes/kube-controller-manager.conf
vi /etc/kubernetes/kube-controller-manager.conf
# more /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://10.0.2.15:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"

启动kube-controller-manager

systemctl daemon-reload
systemctl enable kube-controller-manager
systemctl start kube-controller-manager
systemctl status kube-controller-manager

4、kube-scheduler服务
kube-scheduler服务也依赖于kube-apiserver服务。
配置systemd服务文件:/usr/lib/systemd/system/kube-scheduler.service

touch /usr/lib/systemd/system/kube-scheduler.service
vi /usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=-/etc/kubernetes/kube-scheduler.conf
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

配置文件:

touch /etc/kubernetes/kube-scheduler.conf
vi /etc/kubernetes/kube-scheduler.conf
# cat /etc/kubernetes/kube-scheduler.conf
KUBE_SCHEDULER_ARGS="--master=http://127.0.0.1:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"

注:--master根据自己的ip填写,也可以写127.0.0.1
启动scheduler

systemctl daemon-reload
systemctl enable kube-scheduler
systemctl start kube-scheduler
systemctl status kube-scheduler

如果都可以正常启动,master节点搭建完毕

二、使用二进制方式部署k8s的Node节点
在Node节点上,以同样的方式把从压缩包中解压出的二进制文件kubelet  kube-proxy放到/usr/bin目录中。(需要在每个node节点上完成下列操作)
1、kubelet服务

touch /usr/lib/systemd/system/kubelet.service
vi /usr/lib/systemd/system/kubelet.service

配置systemd服务文件:/usr/lib/systemd/system/kubelet.service

[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/kubelet.conf
ExecStart=/usr/bin/kubelet $KUBELET_ARGS
Restart=on-failure
KillMode=process

[Install]
WantedBy=multi-user.target

配置文件

touch /etc/kubernetes/kubelet.conf
vi /etc/kubernetes/kubelet.conf
KUBELET_ARGS="--address=10.0.2.4 --port=10250 --hostname-override=10.0.2.4 --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --cluster-dns=10.10.10.2 --cluster-domain=cluster.local --fail-swap-on=false --logtostderr=true --log-dir=/var/log/kubernetes --v=4"

注:--address改为master地址,--hostname-override改为node地址,--kubeconfig是链接文件的地址

由于现在新的版本很多配置无法使用(--master,--server等会报错),可以使用--kubeconfig链接到相应的地址,很多都可以写到config文件中,config语法和conf不同,不可直接复制粘贴conf中的内容,文档config文件只是链接了server的IP,实现其它功能可自行搜索学习(尽量都写在--kubeconfig里面,现在的版本很多--配置会报错)

touch /etc/kubernetes/kubelet.kubeconfig
vi /etc/kubernetes/kubelet.kubeconfig
# more /etc/kubernetes/kubelet.kubeconfig
apiVersion: v1
kind: Config
clusters:
  - cluster:
      server: http://172.171.17.146:8080
    name: local
contexts:
  - context:
      cluster: local
    name: local
current-context: local

注释:server:改为自己的server地址
要建立kubelet的工作目录,不然会报错

mkdir -p /var/lib/kubelet
systemctl daemon-reload
systemctl enable kubelet
systemctl start kubelet
systemctl status kubelet

2、kube-proxy服务
kube-proxy服务依赖于network服务。
配置systemd服务文件:/usr/lib/systemd/system/kube-proxy.service

touch /usr/lib/systemd/system/kube-proxy.service
vi /usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.service
Requires=network.service

[Service]
EnvironmentFile=/etc/kubernetes/kube-proxy.conf
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
KillMode=process

[Install]
WantedBy=multi-user.target

配置文件

touch /etc/kubernetes/kube-proxy.conf
vi /etc/kubernetes/kube-proxy.conf
KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig --hostname-override=172.171.17.146 --logtostderr=true --log-dir=/var/log/kubernetes --v=4"

上述配置文件的相关参数修改和kubelet相同,如--hostname-override需要需改为主机的node的ip

创建kubeconfig文件

touch /etc/kubernetes/kube-proxy.kubeconfig
vi /etc/kubernetes/kube-proxy.kubeconfig
apiVersion: v1
kind: Config
clusters:
  - cluster:
      server: http://10.0.2.15:8080
    name: local
contexts:
  - context:
      cluster: local
    name: local
current-context: local

注释:同样 server: 改为直接server的地址

mkdir -p /var/lib/kubelet
systemctl daemon-reload
systemctl enable kubelet
systemctl start kubelet
systemctl status kubelet

完成k8s集群的基本搭建
三、对搭建完成的k8s集群进行一些验证测试
# kubectl get nodes
# kubectl get svc
# kubectl get cs


测试完成

恭喜你,完成了kubenetes的安装
搭建过程中遇到的一些问题,可通过(vim /var/log/messagea)查看错误,报错及解决方法,在下一篇为文档中,如有相同,可以参考修改,其他问题欢迎评论

在k8s上运行相关的组件和配置密钥证书,flannal网络等会在后续的文章中给出教程,欢迎指导学习

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QwQ一叶

你的打赏是我制作教程最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值