kubernetes集群安装
kubernetes集群手工安装
这里以一台
master节点和一台node节点为例,其中我将master也用作node
一、master节点
先关闭防火墙:
# systemctl stop firewalld
# systemctl disable firewalld
- 安装
etcd
首先需要在GitHub上下载etcd的二进制文件包,这里以etcd-v3.1.15-linux-amd64.tar.gz为例
我写了个简单的安装etcd的脚本,可以参考一下
# cat install-etcd.sh
#!/bin/bash
tar xzf etcd-v3.1.15-linux-amd64.tar.gz
cp etcd-v3.1.15-linux-amd64/etcd etcd-v3.1.15-linux-amd64/etcdctl /usr/bin
if [ ! -e /var/lib/etcd ]; then
mkdir /var/lib/etcd
fi
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
if [ ! -e /etc/etcd ]; then
mkdir /etc/etcd
fi
cat > /etc/etcd/etcd.conf << EOF
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379"
EOF
systemctl daemon-reload
systemctl start etcd.service
systemctl enable etcd.service
etcdctl cluster-health
步骤为:1.将etcd和etcdctl二进制文件复制到/usr/bin目录下,或者其他PATH路径下,只需要在service文件中写正确即可。2.设置服务文件。3.编辑配置文件(详细的参数可以参考官网)
至此,etcd服务安装完成。
kube-apiserver服务,首先在GitHub上下载kubernetes的二进制包,这里以1.3.0版本的kubernetes.tar.gz为例
这里也通过脚本来说明:
# cat install-apiserver.sh
tar xzf kubernetes.tar.gz
tar xzf kubernetes/server/kubernetes-server-linux-amd64.tar.gz
cp -a kubernetes/server/bin/kube-apiserver /usr/bin
cat > /usr/lib/systemd/system/kube-apiserver.service << EOF
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
After=etcd.service
[Service]
EnvironmentFile=-/etc/kubernetes/apiserver
User=kube
ExecStart=/usr/bin/kube-apiserver \
\$KUBE_ETCD_SERVERS \
\$KUBE_API_ADDRESS \
\$KUBE_SERVICE_ADDRESSES \
\$KUBE_ADMISSION_CONTROL \
\$KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
if [ ! -e /etc/kubernetes ]; then
mkdir /etc/kubernetes
fi
cat > /etc/kubernetes/apiserver << EOF
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0 --insecure-port=8080"
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS="--service-node-port-range=1-65535"
EOF
systemctl daemon-reload
systemctl start kube-apiserver
systemctl enable kube-apiserver
systemctl is-active kube-apiserver
启动参数:
1). --insecure-bind-address:apiserver绑定主机的非安全ip地址,0.0.0.0表示绑定所有ip地址
2). --insecure-port=8080:apiserver绑定的非安全端口,默认8080
3). --etcd-servers:etcd服务的地址
4). --service-cluster-ip-range:apiserver分配给集群中service的虚拟IP的网段,不能与物理机的IP地址段重合
5). --admission-control:集群中准入控制,详细的见官网
6). --service-node-port-range:端口映射物理机的范围,默认为30000-32767
其他的启动参数详见官方网站
- kube-controller-manager服务
# cat install-controller-manager.sh
#!/bin/bash
IPADDR=`ifconfig ens32 | grep '\binet\b' | awk '{print $2}'`
cp kubernetes/server/bin/kube-controller-manager /usr/bin
cat > /usr/lib/systemd/system/kube-controller-manager.service << EOF
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
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=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/kubernetes/controller-manager << EOF
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://$IPADDR:8080"
EOF
systemctl daemon-reload
systemctl start kube-controller-manager
systemctl enable kube-controller-manager
- kube-scheduler服务
# cat install-scheduler.sh
#!/bin/bash
IPADDR=`ifconfig ens32 | grep '\binet\b' | awk '{print $2}'`
cp kubernetes/server/bin/kubectl /usr/bin
cp kubernetes/server/bin/kube-scheduler /usr/bin
cat > /usr/lib/systemd/system/kube-scheduler.service << EOF
[Unit]
Description=Kubernetes Scheduler Plugin
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
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
EOF
cat > /etc/kubernetes/scheduler << EOF
KUBE_SCHEDULER_ARGS="--master=http://$IPADDR:8080 --logtostderr=false"
EOF
systemctl daemon-reload
systemctl start kube-scheduler
systemctl enable kube-scheduler
至此master必须的服务已经安装完成,接下来的操作是在node节点安装kubelet和kube-proxy,如果你想把master节点也当做node的话,那就在master节点上也安装该服务。
- kubelet安装:kubelet服务依赖docker,请先安装好docker。
cp kubernetes/server/bin/kubelet /usr/bin
if [ ! -e /etc/kubernetes/config ]; then
mkdir /etc/kubernetes/config
fi
if [ ! -e /var/lib/kubelet ]; then
mkdir /var/lib/kubelet
fi
cat > /usr/lib/systemd/system/kubelet.service << EOF
[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/config
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet \
\$KUBELET_API_SERVER \
\$KUBELET_ADDRESS \
\$KUBELET_HOSTNAME \
\$KUBELET_POD_INFRA_CONTAINER \
\$KUBELET_ARGS
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/kubernetes/kubelet << EOF
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=192.168.26.11"
KUBELET_API_SERVER="--api-servers=http://192.168.26.11:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
EOF
systemctl daemon-reload
systemctl start kubelet
systemctl enable kubelet
- kube-proxy安装
# cat install-kube-proxy.sh
#!/bin/bash
cp kubernetes/server/bin/kube-proxy /usr/bin
if [ ! -e /etc/kubernetes/config ]; then
mkdir /etc/kubernetes/config
fi
cat > /usr/lib/systemd/system/kube-proxy.service << EOF
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy \$KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/kubernetes/proxy << EOF
KUBE_PROXY_ARGS="--master=http://192.168.26.11:8080 --logtostderr=false"
EOF
systemctl daemon-reload
systemctl start kube-proxy
systemctl enable kube-proxy
在node节点上安装kubelet和kube-proxy的时候注意master节点的地址即可。
现在一个单节点的环境安装完成:
# kubectl get node
NAME STATUS AGE
192.168.26.11 Ready 2s
到此,一个kubernetes集群安装完成。在之后的练习中如果发现错误,可参考文章:https://steemit.com/kubernetes/@pmliang/pod
Congratulations @pmliang! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Click on any badge to view your Board of Honor.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOPCongratulations @pmliang! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!