­

二进制安装k8s集群(8)-安装kube-apiserver

上一篇文章里我们主要介绍harbor的安装以及简单使用,这里我们主要介绍安装kube-apiserver。这里我们采用下载二进制binary制作linux systemd的方式安装,并开启kube-apiserver的ssl。这里在github下载kubernetes(1.15.1版本)。同时请提前制作好kuber-apiserver的ssl证书,可以参考以前文章中制作docker的cert。

下载kubernetes:

# download client binary  wget https://dl.k8s.io/v1.15.1/kubernetes-client-linux-amd64.tar.gz  # download server binary  wget https://dl.k8s.io/v1.15.1/kubernetes-server-linux-amd64.tar.gz  # download node binary  wget https://dl.k8s.io/v1.15.1/kubernetes-node-linux-amd64.tar.gz    tar -xzvf kubernetes-client-linux-amd64.tar.gz  tar -xzvf kubernetes-server-linux-amd64.tar.gz  tar -xzvf kubernetes-node-linux-amd64.tar.gz

copy binary文件:

cp /opt/sw/kubernetes/install/kubernetes/server/bin/kube-apiserver /usr/bin/  whereis kube-apiserver

copy 证书文件:

因为kube-apiserver需要和etcd通讯,需要和kubeltet通讯,本身还提供api服务,这些通讯都我们开启ssl认证,所以请提前制作好相应的证书并copy到配置目录(可以参考以前文章中制作docker的cert)。

mkdir -p /etc/kubernetes/apiserver  mkdir -p /etc/kubernetes/apiserver/cert/etcd  mkdir -p /etc/kubernetes/apiserver/cert/kubelet  mkdir -p /etc/kubernetes/apiserver/cert/server

创建basic-auth和static-token-auth文件:

这里提供一下kube-apiserver的basic auth和静态token访问配置文件

touch /etc/kubernetes/apiserver/k8s-auth-static-token.csv  cat > /etc/kubernetes/apiserver/k8s-auth-static-token.csv <<EOF  token,user,uid  abc123_,rodney,rodney  EOF    touch /etc/kubernetes/apiserver/k8s-auth-static-password.csv  cat > /etc/kubernetes/apiserver/k8s-auth-static-password.csv <<EOF  password,user,uid  abc123_,rodney,rodney  EOF

创建kube-apiserver配置文件:

这里的配置非常多,就不逐一介绍了,感兴趣的同学请查阅kube-apiserver的配置文档或者参考kube-apiserver binary的help命令。

touch /etc/kubernetes/apiserver/k8s-apiserver.conf    cat > /etc/kubernetes/apiserver/k8s-apiserver.conf <<EOF  KUBE_ADDRESS="--advertise-address=172.20.11.41 --bind-address=172.20.11.41 --insecure-bind-address=127.0.0.1"  KUBE_API_PORT="--port=8080 --secure-port=6443"  KUBE_ETCD_SERVERS="--storage-backend=etcd3 --etcd-servers=https://172.20.11.41:2379,https://172.20.11.42:2379,https://172.20.11.43:2379   --etcd-cafile=/etc/kubernetes/apiserver/cert/etcd/ca.crt   --etcd-certfile=/etc/kubernetes/apiserver/cert/etcd/etcd-client.crt   --etcd-keyfile=/etc/kubernetes/apiserver/cert/etcd/etcd-client.key"  KUBE_KUBELET="--kubelet-port=10250   --kubelet-https=true   --kubelet-certificate-authority=/etc/kubernetes/apiserver/cert/kubelet/ca.crt   --kubelet-client-certificate=/etc/kubernetes/apiserver/cert/kubelet/k8skubelet-client.crt   --kubelet-client-key=/etc/kubernetes/apiserver/cert/kubelet/k8skubelet-client.key"  KUBE_ADMISSION_CONTROL="--admission-control=ServiceAccount,NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"  KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"  KUBE_NODE_PORT="--service-node-port-range=80-30000"  KUBE_API_TLS="--tls-cert-file=/etc/kubernetes/apiserver/cert/server/k8sapiserver-server.crt   --tls-private-key-file=/etc/kubernetes/apiserver/cert/server/k8sapiserver-server.key   --client-ca-file=/etc/kubernetes/apiserver/cert/server/ca.crt"  KUBE_API_ARGS="--service-account-key-file=/etc/kubernetes/apiserver/cert/server/k8sapiserver-server.key   --basic-auth-file=/etc/kubernetes/apiserver/k8s-auth-static-password.csv   --token-auth-file=/etc/kubernetes/apiserver/k8s-auth-static-token.csv"  # logging to stderr means can get in systemd journal  KUBE_LOGTOSTDERR="--logtostderr=true"  # journal message level, 0 is debug  KUBE_LOG_LEVEL="--v=0"  # Should this cluster be allowed to run privileged docker containers  KUBE_ALLOW_PRIV="--allow-privileged=true"  EOF    source /etc/kubernetes/apiserver/k8s-apiserver.conf

创建kube-apiserver systemd unit文件:

touch /usr/lib/systemd/system/kube-apiserver.service    cat > /usr/lib/systemd/system/kube-apiserver.service <<EOF  [Unit]  Description=Kubernetes API Service  After=network.target network-online.target  Wants=network-online.target    [Service]  Type=simple  EnvironmentFile=/etc/kubernetes/apiserver/k8s-apiserver.conf  ExecStartPre=source /etc/kubernetes/apiserver/k8s-apiserver.conf  ExecStart=/usr/bin/kube-apiserver   ${KUBE_API_ADDRESS}   $KUBE_API_PORT   $KUBE_ETCD_SERVERS   $KUBE_KUBELET   $KUBE_ADMISSION_CONTROL   $KUBE_SERVICE_ADDRESSES   $KUBE_NODE_PORT   $KUBE_API_TLS   $KUBE_API_ARGS   $KUBE_LOGTOSTDERR   $KUBE_LOG_LEVEL   $KUBE_ALLOW_PRIV  Restart=on-failure  LimitNOFILE=65536    [Install]  WantedBy=multi-user.target  EOF

reload并且设置开机服务启动:

systemctl daemon-reload  systemctl enable kube-apiserver

打开kube-apiserver防火墙访问端口:这里配置是6443

firewall-cmd --list-all  firewall-cmd --permanent --zone=public --add-port=6443/tcp  firewall-cmd --reload  firewall-cmd --list-all

启动服务查看状态:

systemctl start kube-apiserver  systemctl status kube-apiserver

目前先写到这里,下一篇文章里我们继续介绍k8s组件kubectl的安装。