使用二进制安装包部署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 | 虚拟机/电脑IP | master |
kube-node1 | 虚拟机/电脑IP | node1 |
kube-node2 | 虚拟机/电脑IP | node2 |
组件说明(除可选外,其它组件必须安装,建议node都安装dockers)
角色 | 组件 | 备注 |
master | docker、etcd、api-server、scheduler、controller-manager | dockers(可选) |
node1 | docker、etcd、kubelet、proxy | etcd,dockers(可选) |
node2 | docker、etcd、kubelet、proxy | etcd,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
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网络等会在后续的文章中给出教程,欢迎指导学习