欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

kubernetes 1.13.1 二进制方式 离线 安装

程序员文章站 2022-03-12 12:41:42
...

目录

 

卸载原先的

安装docker

下载k8s,拷贝到 usr/bin

关闭防火墙和SELINUX 关闭swap

部署 master 节点

部署kube-apiserver

kube-controller-manager

 kube-scheduler

部署node

kube-proxy

kubelet 

查看结果


卸载原先的

sudo yum remove -y kubernetes* docker*

安装docker

https://blog.csdn.net/wangjunsheng/article/details/84939618

 

下载k8s,拷贝到 usr/bin

wget https://dl.k8s.io/v1.13.1/kubernetes-server-linux-amd64.tar.gz
tar -vxf kubernetes-server-linux-amd64.tar.gz 

sudo mv kubelet /usr/bin
sudo mv kube-proxy /usr/bin
sudo mv kubectl /usr/bin
sudo mv kube-apiserver /usr/bin
sudo mv kube-scheduler  /usr/bin
sudo mv kube-controller-manager  /usr/bin

关闭防火墙和SELINUX 关闭swap

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
vi /etc/selinux/config
SELINUX=disabled

swapoff -a && sysctl -w vm.swappiness=0
vi /etc/fstab
#UUID=7bff6243-324c-4587-b550-55dc34018ebf swap                    swap    defaults        0 0

部署 master 节点

部署kube-apiserver

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

[Unit] 
Description=Kubernetes API Server 
Documentation=https://github.com/kubernetes 
After=etcd.service 
Wants=etcd.service

[Service] 
ExecStart=/usr/bin/kube-apiserver --etcd-servers http://127.0.0.1:2379 --insecure-bind-address 0.0.0.0 --insecure-port 8080 --service-cluster-ip-range 10.254.0.0/24 --service-node-port-range 1-65535 --admission-control "NamespaceLifecycle,LimitRanger,SecurityContextDeny,ResourceQuota" --logtostderr true --log-dir /var/log/kubernetes --v 2
Restart=on-failure 
Type=notify
RestartSec=10s
LimitNOFILE=65536

[Install] 
WantedBy=multi-user.target

 

kube-controller-manager

/lib/systemd/system/kube-controller-manager.service 

[Unit]
Description=Kubernetes Scheduler
After=kube-apiserver.service 
Requires=kube-apiserver.service

[Service]
ExecStart=/usr/bin/kube-controller-manager \
        --master=http://127.0.0.1:8080 \
        --logtostderr=true --log-dir /var/log/kubernetes --v=2
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

 

 kube-scheduler

/lib/systemd/system/kube-scheduler.service  

[Unit]
Description=Kubernetes Scheduler
After=kube-apiserver.service 
Requires=kube-apiserver.service

[Service]
User=root
ExecStart=/usr/bin/kube-scheduler --master=http://127.0.0.1:8080 --logtostderr=true --log-dir /var/log/kubernetes --v=2
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

systemctl daemon-reload

systemctl start kube-apiserver

systemctl start kube-scheduler

systemctl start kube-controller-manager

 

如果失败 可以用下面的命令查看日志 ,

systemctl status kube-apiserver
journalctl -xe

 容易导致的错误 

1、 应用程序路径不正确

2、我装的etcd 是非加密的  http,  而我用了 https 路径,这个问题的现象是 kubectl 卡死,一直无法返回

3、遇到一些棘手的问题时,建议直接启动程序,而不用 systemctl, 这样非常方便查看错误日志

      直接在控制台启动程序,比如

kube-apiserver --etcd-servers http://127.0.0.1:2379 --insecure-bind-address 0.0.0.0 --insecure-port 8080 --service-cluster-ip-range 10.254.0.0/24 --service-node-port-range 1-65535 --admission-control "NamespaceLifecycle,LimitRanger,SecurityContextDeny,ResourceQuota" --logtostderr false --log-dir /var/log/kubernetes --v 2

     

部署node

我试了下,master可以兼容老版本的node的。 也就是说 我之前1.5.2的node的版本可以 添加进来。

如果是1.5.2的, 可以参考 这个文章: kubernetes 添加node

 

kube-proxy

/lib/systemd/system/kube-proxy.service

[Unit]
Description=Kubernetes Proxy
After=network.target
 
[Service]
ExecStart=/usr/bin/kube-proxy  \
  --hostname-override=127.0.0.1 \
  --master=http://127.0.0.1:8080 \
  --logtostderr=true
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

kubelet 

这个麻烦些,后面版本的kuelet 取消了  --api-servers=http://192.168.255.130:8080,得借助kubectl来生成配置文件

/lib/systemd/system/kubelet.service

[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service
 
[Service]
WorkingDirectory=/var/lib/kubelet
ExecStart=/usr/bin/kubelet \
  --hostname-override=192.168.255.129 \
  --kubeconfig=/k8s/cfg/bootstrap.kubeconfig\
  --cluster-dns=10.254.0.2 \
  --cluster-domain=cluster.local \
  --pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest\
  --logtostderr=true
Restart=on-failure
KillMode=process
 
[Install]
WantedBy=multi-user.target

/k8s/cfg/bootstrap.kubeconfig 是借助 kubectl 生成的,内容如下, 其实主要是想要这份文件的 api-server 信息

其实  --cluster-dns 也有争议,早晚被干掉,借助 kubeconfig 来配置。 这个干应该是可以支持动态修改吧。我偷懒,暂时还是用老参数配置

可以参考 CentOS 使用二进制部署 Kubernetes 1.13集群

apiVersion: v1
clusters:
- cluster:
    server: http://127.0.0.1:8080
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubelet-bootstrap
  name: default
current-context: default
kind: Config
preferences: {}
users: []

搞完后,启动 就行了

systemctl daemon-reload

systemctl start kube-proxy

systemctl start kubelet

 

查看结果

我是因为再部署了个 node,所以显示有2个node

kubectl get no
NAME              STATUS    ROLES     AGE       VERSION
192.168.255.129   Ready     <none>    4h        v1.10.12
192.168.255.130   Ready     <none>    4h        v1.5.2
kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   

 再把之前的 mysql myweb例子被部署上去,看看

kub get all -o wide
NAME              READY     STATUS    RESTARTS   AGE       IP          NODE
pod/mysql-9wwzt   1/1       Running   0          2h        10.0.34.2   192.168.255.129
pod/myweb-99lfw   1/1       Running   0          2h        10.0.34.3   192.168.255.129

NAME                          DESIRED   CURRENT   READY     AGE       CONTAINERS   IMAGES                    SELECTOR
replicationcontroller/mysql   1         1         1         2h        mysql        mysql:5.6                 app=mysql
replicationcontroller/myweb   1         1         1         2h        myweb        kubeguide/tomcat-app:v1   app=myweb

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE       SELECTOR
service/kubernetes   ClusterIP   10.254.0.1     <none>        443/TCP          4h        <none>
service/mysql        ClusterIP   10.254.0.23    <none>        3306/TCP         4h        app=mysql
service/myweb        NodePort    10.254.0.166   <none>        8080:30001/TCP   4h        app=myweb

 

再参考下面博客, 把 flannel 和 dns 部署好。

1. 部署 kubernetes 部署本地dns

2. 部署 kubernetes 部署flannel

如果之前已经部署好了,重新装docker 后只要在相关的 docker.service 上改下(参考本文前面)即可。

dns的话 只要在启动 k8s 后启动相应的 rc svc 即可