kubernetes1.14.3二进制安装
标签:kubernetes
安装规划
| 192.168.100.3 | k8s-master01 | etcd、kube-apiserver、kubectl、kube-scheduler、kube-controller-manager、flanneld |
|---|---|---|
| 192.168.100.4 | k8s-node01 | etcd、flanneld、kubelet、kube-proxy、docker |
| 192.168.100.6 | k8s-node02 | etcd、flanneld、kubelet、kube-proxy、docker |
初始化环境
停止iptables
1 | systemctl stop firewalld.service |
关闭selinux
1 | setenforce 0 #临时关闭 |
设置sysctl(仅供参考)
1 | cat << EOF >> /etc/sysctl.conf |
1 | cat << EOF >> /etc/sysctl.conf |
关闭swap
1 | swapoff -a |
加载ipvs
1 | yum install ipvsadm -y |
node节点安装docker
1 | wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
配置主机名
1 | #k8s-master01 |
修改hosts
1 | cat << EOF >> /etc/hosts |
同步时间
1 | yum install -y chrony |
配置免密登录
1 | [root@k8s-master01 ~]# ssh-keygen #生成密钥 直接按三个回车 |
配置证书
| 组件 | 需要的证书 |
|---|---|
| etcd | ca.pem server.pem server-key.pem |
| kube-apiserver | ca.pem server.pem server-key.pem |
| kubelet | ca.pem ca-key.pem |
| kube-proxy | ca.pem kube-proxy.pem kube-proxy-key.pem |
| kubectl | ca.pem admin.pem admin-key.pem |
安装证书工具
1 | #masker |
生成ca证书
1 | cat << EOF >> ca-config.json |
生成server证书
1 | cat << EOF >> server-csr.json |
生成admin证书
1 | cat << EOF >> server-csr.json |
生产kube-proxy证书
1 | cat << EOF >> kube-proxy-csr.json |
同步服务器证书
1 | scp -r /root/ssl k8s-node01:/root/ |
部署etcd集群
下载修改配置文件
1 | wget https://github.com/etcd-io/etcd/releases/download/v3.3.11/etcd-v3.3.11-linux-amd64.tar.gz |
复制配置文件到各个节点
1 | scp /usr/lib/systemd/system/etcd.service k8s-node01:/usr/lib/systemd/system/etcd.service |
修改对应节点配置文件
1 | cat /k8s/etcd/cfg/etcd |
启动etcd集群
1 | #各个节点都需要执行 |
检查集群状态
1 | etcdctl --ca-file=/root/ssl/ca.pem --cert-file=/root/ssl/server.pem --key-file=/root/ssl/server-key.pem --endpoints="https://192.168.100.3:2379,https://192.168.100.4:2379,https://192.168.100.6:2379" cluster-health |

部署flannel网路
下载flannel
1 | wget https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz |
向 etcd 写入集群 Pod 网段信息
1 | etcdctl --ca-file=/root/ssl/ca.pem --cert-file=/root/ssl/server.pem --key-file=/root/ssl/server-key.pem --endpoints="https://192.168.100.3:2379,https://192.168.100.4:2379,https://192.168.100.6:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}' |
设置flanneld配置文件和启动管理文件
1 | cat << EOF >> /k8s/flanneld/cfg/flanneld |
启动flanneld
1 | systemctl daemon-reload |
验证flanneld
1 | #使用ifconfig查看 |
分发配置文件到node节点
1 | cd /k8s/ |
node节点配置Docker启动指定flanneld子网段
1 | mv /usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service_back |
验证是否成功
1 | [root@k8s-node01 ~]# ifconfig |
bootstrap.kubeconfig
bootstrap.kubeconfig和kube-proxy.kubeconfig是分发在node节点上的配置文件,kubelet会用到bootstrap.kubeconfig而kube-proxy会用到kube-proxy.kubeconfig,在配置node节点是会用到这里首先生成
1 | wget https://storage.googleapis.com/kubernetes-release/release/v1.14.3/kubernetes-server-linux-amd64.tar.gz |
生成bootstrap.kubeconfig文件
1 | #设置集群参数 |
kube-proxy.kubeconfig
生成kube-proxy.kubeconfig文件
1 | kubectl config set-cluster kubernetes \ |
部署api-server
编辑配置文件
1 | cat <<EOF>> /k8s/kubernetes/server/cfg/kube-apisever |
启动api-server
1 | cat <<EOF>> /usr/lib/systemd/system/kube-apiserver.service |
部署kube-scheduler
编辑配置文件
1 | cat <<EOF>> /k8s/kubernetes/server/cfg/kube-scheduler |
启动kube-scheduler
1 | cat <<EOF>> /usr/lib/systemd/system/kube-scheduler.service |
部署kube-controller-manager
编辑配置文件
1 | cat <<EOF>> /k8s/kubernetes/server/cfg/kube-controller-manager |
启动kube-controller-manager
1 | cat <<EOF>> /usr/lib/systemd/system/kube-controller-manager.service |
1 | #查看master集群状态 |
部署kubelet
分发配置文件
1 | scp -r /root/ssl k8s-node01:/root/ |
编辑配置文件
1 | cat <<EOF>> /k8s/kubernetes/server/cfg/kubelet |
启动kubelet
1 | cat <<EOF>> /usr/lib/systemd/system/kubelet.service |
部署kube-proxy
编辑配置文件
1 | cat <<EOF>> /k8s/kubernetes/server/cfg/kube-proxy |
启动kubernetes集群
1 | #在master创建用户角色并绑定权限 |
将其他的节点部署上kube-proxy、kubele(注意修改配置文件)
部署kubernetes-dashbord
下载编排文件
1 | wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml |
将镜像地址修改为mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1将api地址指向设置好的地址- –apiserver-host=http://192.168.100.3:8080
安装部署
1 | kubectl create -f kubernetes-dashboard.yaml |
查看状态
1 | kubectl get service --all-namespaces |
授权文件
1 | cat <<EOF>> kubernetes-dashboard-admin.rbac.yaml |
1 | kubectl create -f kubernetes-dashboard-admin.rbac.yaml |
1 | kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') |
映射dashboard
1 | kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system #以打补丁方式修改dasboard的访问方式 |
选择令牌登录复制token(使用的是https协议但是证书会报错误,使用谷歌浏览器无法信任证书,使用火狐高级选着信任即可)

部署coredns
修改server-csr.json将dns网段加入证书中
修改coredns.yaml
1 | apiVersion: v1 |
部署ingress
下载ingress官方部署文件可以选择版本
1 | wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.20.0/deploy/mandatory.yaml |
修改配置文件
跟换两个镜像,在args标签中加入apiserver地址- –apiserver-host=http://192.168.100.3:8080
打开k8s apiserver配置文件去掉SecurityContextDeny这个参数,spec标签中加入在hostNetwork: true否则80和443端口无法启动
1 | apiVersion: v1 |
例子:
部署一个test.nginx.com域名的nginx的服务器
1 | #部署一个nginx服务 |
部署prometheus监控
下载需要的文件prometheus
部署node-exporter组件
1 | kubectl create -f node-exporter.yaml |
部署prometheus监控
1 | #rbac文件 |
部署grafana组件
1 | #grafana deployment配置文件 |
导入k8s监控模板
1 | { |
部署Metrics-Server
Metrics-Server可以使用kubernetes的Metrics-api获取CPU、内存数据,以便配合hpa实现自动化扩缩容
Metrics-Server官方下载地址我使用的是v0.3.1的版本
1 | cd metrics-server/deploy/1.8+/ |
首先需要生成证书
1 | cat <<EOF>> /root/ssl/metrics-server-csr.json |
将生成的证书分发到那个节点上
修改api-server
1 | --requestheader-client-ca-file=/root/ssl/ca.pem \ #ca 证书 |
修改kube-controller-manager
1 | --horizontal-pod-autoscaler-use-rest-clients=true |
修改上面下载的配置文件
1 | cat metrics-server-deployment.yaml |
1 | [root@k8s-master01 metrics]# kubectl top node |
配合hpa实现自动化扩缩容
例子:
1 | [root@k8s-master01 javaweb]# cat javaweb-server.yaml |
1 | [root@k8s-master01 javaweb]# cat java.yaml |