kubernetes集群安装

in #kubernetes8 years ago

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节点安装kubeletkube-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

Sort:  

Congratulations @pmliang! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You got a First Reply

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 STOP

Do you like SteemitBoard's project? Vote for its witness and get one more award!

Congratulations @pmliang! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

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!

Coin Marketplace

STEEM 0.04
TRX 0.32
JST 0.081
BTC 60794.22
ETH 1603.88
USDT 1.00
SBD 0.47