环境信息:
操作系统 | 主机名 | IP 地址 |
---|---|---|
CentOS 7.6 | k8s-master | 192.168.31.61 |
CentOS 7.6 | k8s-node1 | 192.168.31.62 |
CentOS 7.6 | k8s-node2 | 192.168.31.63 |
1. 安装要求
在开始之前, 部署 Kubernetes 集群机器需要满足以下几个条件:
操作系统 CentOS7.x-86_x64
硬件配置: 2GB 或更多 RAM,2 个 CPU 或更多 CPU, 硬盘 30GB 或更多
集群中所有机器之间网络互通
可以访问外网, 需要拉取镜像
禁止 swap 分区
2. 学习目标
在所有节点上安装 Docker 和 kubeadm
部署 Kubernetes Master
部署容器网络插件
部署 Kubernetes Node, 将节点加入 Kubernetes 集群中
部署 Dashboard web 页面, 可视化查看 Kubernetes 资源
3. 准备环境
关闭防火墙:
- $ systemctl stop firewalld
- $ systemctl disable firewalld
关闭 selinux:
- $ sed -i 's/enforcing/disabled/' /etc/selinux/config
- $ setenforce 0
关闭 swap:
$ swapoff -a 临时
$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 永久
添加主机名与 IP 对应关系 (记得设置主机名):
- $ cat /etc/hosts
- 192.168.31.61 k8s-master
- 192.168.31.62 k8s-node1
- 192.168.31.63 k8s-node2
将桥接的 IPv4 流量传递到 iptables 的链:
- $ cat> /etc/sysctl.d/k8s.conf <<EOF
- net.bridge.bridge-nf-call-ip6tables = 1
- net.bridge.bridge-nf-call-iptables = 1
- net.ipv4.ip_forward = 1
- EOF
- $ sysctl --system
4. 所有节点安装 Docker/kubeadm/kubelet
4.1 安装 Docker
- $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
- $ yum -y install docker-ce
- $ systemctl enable docker && systemctl start docker
4.2 添加阿里云 YUM 软件源
- $ cat> /etc/yum.repos.d/kubernetes.repo << EOF
- [kubernetes]
- name=Kubernetes
- baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
- enabled=1
- gpgcheck=0
- repo_gpgcheck=0
- gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
- EOF
4.3 安装 kubeadm,kubelet 和 kubectl
指定版本号部署:
- $ yum install -y kubelet-1.15.2 kubeadm-1.15.2 kubectl-1.15.2
- $ systemctl enable kubelet
5. 部署 Kubernetes Master
在 192.168.31.63(Master) 执行.
$ kubeadm init --apiserver-advertise-address=192.168.31.61 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.2 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
由于默认拉取镜像地址 k8s.gcr.io 国内无法访问, 这里指定阿里云镜像仓库地址.
使用 kubectl 工具:
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- $ kubectl get nodes
6. 安装 Pod 网络插件 (CNI)
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
确保能够访问到 quay.io 这个 registery.
如果下载失败, 可以改成这个镜像地址: lizhenliang/flannel:v0.11.0-amd64
7. 加入 Kubernetes Node
在 192.168.31.62/63(Node) 执行.
向集群添加新节点, 执行在 kubeadm init 输出的 kubeadm join 命令:
$ kubeadm join 192.168.31.61:6443 --token esce21.q6hetwm8si29qxwn --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
8. 测试 kubernetes 集群
在 Kubernetes 集群中创建一个 pod, 验证是否正常运行:
- $ kubectl create deployment nginx --image=nginx
- $ kubectl expose deployment nginx --port=80 --type=NodePort
- $ kubectl get pod,svc
9. 部署 Dashboard
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
默认镜像国内无法访问, 修改镜像地址为: lizhenliang/kubernetes-dashboard-amd64:v1.10.1
默认 Dashboard 只能集群内部访问, 修改 Service 为 NodePort 类型, 暴露到外部:
- kind: Service
- apiVersion: v1
- metadata:
- labels:
- k8s-App: kubernetes-dashboard
- name: kubernetes-dashboard
- namespace: kube-system
- spec:
- type: NodePort
- ports:
- - port: 443
- targetPort: 8443
- nodePort: 30001
- selector:
- k8s-App: kubernetes-dashboard
- $ kubectl apply -f kubernetes-dashboard.YAML
访问地址: http://NodeIP:30001 http://nodeip:30001/
创建 service account 并绑定默认 cluster-admin 管理员集群角色:
- $ kubectl create serviceaccount dashboard-admin -n kube-system
- $ kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
- $ kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
使用输出的 token 登录 Dashboard.
Kubernetes 集群安装 Metrics Server
$ Git clone https://github.com/kubernetes-incubator/metrics-server
下载完成后还需要对 metrics-server/deploy/1.8+/resource-reader.YAML 文件进行修改
- ## 官方仓库中的清单文件 metrics-server-deployment.YAML 中未明确主程序 metrics-server 传递参数指定指标数据的获取接口, 它通常应该是 kubernetes.summary_api
- image: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.3
- args:
- - --kubelet-insecure-tls
- - --kubelet-preferred-address-types=InternalIP
修改完之后即可直接使用
$ kubectl apply -f deploy/metrics-server/deploy/1.8+/
查看 pod 是否为 Running 状态
- $
- kubectl get pod -n kube-system
查看节点, POD 资源监控
- kubectl top node
- kubectl top pods -n kube-system
参考李振良老师的博客: https://blog.51cto.com/lizhenliang/2296100
来源: http://www.bubuko.com/infodetail-3204015.html