kubernetes 1.13.1 二进制方式 离线 安装
目录
卸载原先的
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 即可