K8S之二进制包安装

#kubernetes

二进制安装

Master节点安装 etcd kube-controller-manager kube-scheduler kubectl

1、下载二进制包 https://github.com/kubernetes/kubernetes/releases

本次以1.14.2版本为例

tar -zxf kubernetes.tar.gz
cd kubernetes
cluster/get-kube-binaries.sh

2、下载安装etcd数据库服务 本次以3.3.13版本为例

下载二进制地址:https://github.com/etcd-io/etcd/releases

tar -zxf etcd-v3.3.13-linux-amd64.tar.gz
cp etcd-v3.3.13-linux-amd64/etcd /usr/bin/
cp etcd-v3.3.13-linux-amd64/etcdctl /usr/bin/

vi /usr/lib/systemd/system/etcd.service
	[Unit]
	Description=Etcd Server
	After=network.target

	[Service]
	Type=simple
	WorkingDirectory=/var/lib/etcd/		#数据目录,需要提前创建
	EnvironmentFile=-/etc/etcd/etcd.conf	#配置文件,可有可无
	ExecStart=/usr/bin/etcd --advertise-client-urls=http://127.0.0.1:2379,http://172.23.210.22:2379 -listen-client-urls=http://127.0.0.1:2379,http://172.23.210.22:2379	#指定监听地址,127地址是为了方便etcdctl命令连接

	[Install]
	WantedBy=multi-user.target

3、安装kube-apiserver kube-controller-manager kube-scheduler服务 进到之前的k8s目录,把执行cluster/get-kube-binaries.sh下载的文件解压,

cd kubernetes/server/
tar -zxf kubernetes-server-linux-amd64.tar.gz
cp kubernetes/server/bin/kube-apiserver /usr/bin/
cp kubernetes/server/bin/kube-controller-manager /usr/bin/
cp kubernetes/server/bin/kube-scheduler /usr/bin/

kube-apiserver

vi /usr/lib/systemd/system/kube-apiserver.service
	[Unit]
	Description=Kubernetes API Server
	After=etcd.service
	Wants=etcd.service

	[Service]
	EnvironmentFile=/etc/kubernetes/apiserver
	ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
	Restart=on-failure
	Type=notify
	LimitNOFILE=65536

	[Install]
	WantedBy=multi-user.target

kube-controller-manager

vi /usr/lib/systemd/system/kube-controller-manager.service
	[Unit]
	Description=Kubernetes Controller Manager
	After=kube-apiserver.service
	Requires=kube-apiserver.service

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

	[Install]
	WantedBy=multi-user.target

kube-scheduler

vi /usr/lib/systemd/system/kube-scheduler.service
	[Unit]
	Description=Kubernetes Controller Manager
	After=kube-apiserver.service
	Requires=kube-apiserver.service

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

	[Install]
	WantedBy=multi-user.target

kubeconfig

mkdir /etc/kubernetes/
vi /etc/kubernetes/kubeconfig
	apiVersion: v1
	kind: Config
	users:
	- name: client
	  user:
	clusters:
	- name: default
	  cluster:
		server: http://172.23.210.22:8080
	contexts:
	- context:
		cluster: default
		user: client
	  name: default
	current-context: default

apiserver

vi /etc/kubernetes/apiserver
	KUBE_API_ARGS="--etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota --logtostderr=false --log-dir=/var/log/kubernetes --v=0"

controller-manager

vi /etc/kubernetes/controller-manager
	KUBE_CONTROLLER_MANAGER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=0"

scheduler

vi /etc/kubernetes/scheduler
	KUBE_SCHEDULER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=0"

启用服务

systemctl daemon-reload
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler

kubectl 直接将下载好的二进制文件复制到/usr/bin/目录下即可

cp kubernetes/client/bin/kubectl /usr/bin/

Node节点

kubelet

# kubelet
[Unit]
Description=Kubernetes Kuberlet Server
After=docker.service
Requires=docker.service

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

[Install]
WantedBy=multi-user.target

vi /etc/kubernetes/kubelet
KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --hostname-override=172.23.210.23 --logtostderr=false --log-dir=/var/log/kubernetes --v=0"	# 172.23.210.23为节点名称,建议用本机IP

kube-proxy

# kube-proxy
[Unit]
Description=Kubernetes Kube-proxy Server
After=network.target
Requires=network.target

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

[Install]
WantedBy=multi-user.target

vi /etc/kubernetes/proxy
KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=2"

flannel网络插件:需要在所有node节点上安装 版本:v0.11.0 下载地址:https://github.com/coreos/flannel/releases

二进制文件

tar -zxf flannel-v0.11.0-linux-amd64.tar.gz
cd flannel-v0.11.0-linux-amd64/
mv flanneld /usr/bin/
mv mk-docker-opts.sh /usr/bin/

flanneld服务控制配置

vi /usr/lib/systemd/system/flanneld.service
	[Unit]
	Description=flanneld overlay address etcd agent
	After=network.target
	Before=docker.service

	[Service]
	Type=notify
	EnvironmentFile=/etc/sysconfig/flanneld
	ExecStart=/usr/bin/flanneld -etcd-endpoints=${FLANNEL_ETCD} $FLANNEL_OPTIONS

	[Install]
	RequiredBy=docker.service
	WantedBy=multi-user.target

flanneld配置文件

vi /etc/sysconfig/flanneld
	FLANNEL_ETCD="http://172.23.210.22:2379"
	FLANNEL_ETCD_KEY="/coreos.com/network"

服务启动 先到etcd服务器上执行

etcdctl set /coreos.com/network/config '{ "Network": "169.169.0.0/16" }'

然后在所有的NODE上执行

systemctl stop docker
systemctl start flanneld
mk-docker-opts.sh -c	# 将flannel获得的子网信息写入/run/docker_opts.env 

vi /usr/lib/systemd/system/docker.service
	EnvironmentFile=/run/docker_opts.env	# 指定$DOCKER_OPTS的来源
	ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS	# 增加$DOCKER_OPTS 这个启动参数

systemctl start docker
ip ad	#可以看到docker0网卡下会有一个169.169.*.1/24 的IP

设置服务开机自启

systemctl enable flanneld
echo "mk-docker-opts.sh -c" >> /etc/rc.local	# 将mk-docker-opts.sh加入开机自启,以便系统重启后docker0的ip设置不会丢失
chmod +x /etc/rc.d/rc.local	# 默认rc.local文件没有执行权限,所以需要给该文件添加执行权限,才能实现该文件中配置的命令开机执行

最后更新于