目录
1.环境准备
2.准备工作
2.1 同步所有节点时间
2.2 修改主机名
2.3 配置域名解析
2.4 安装必要的rpm软件
2.5 关闭防火墙
2.6 关闭selinux
2.7 禁用交换分区
2.8 配置网络桥接与路由转发
2.9 配置yum源
2.10 安装docker
3.安装 kubernetes
3.1 添加 Kubernetes 阿里云 yum 源
3.2 安装 kubeadm、kubelet 和 kubectl
3.3 初始化
3.4 安装pod网络附加组件
3.5 加入工作节点
3.6 集群扩容增加node节点
3.7 测试 kubernetes 集群
4.部署Web UI界面(dashboard)
5.安装Heapster
1.环境准备
- 一台或多台机器,配置(最低)2核2G
主机名 | IP 地址 | 操作系统 | 主机角色 |
master | 192.168.6.86 | CentOS 7.5.1804 | k8s-master |
node1 | 192.168.6.87 | CentOS 7.5.1804 | k8s-node |
node2 | 192.168.6.88 | CentOS 7.5.1804 | k8s-node |
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止 swap 分区
2.准备工作
注:所有的节点都进行配置
2.1 同步所有节点时间
1
2
3
4
5
6
7
8
9
10
11
12
13cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime vi /etc/sysconfig/clock 添加修改内容: ZONE="Asia/Shanghai" UTC=false ARC=false yum install -y ntpdate ntpdate time.windows.com hwclock --systohc
2.2 修改主机名
1
2
3hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2
2.3 配置域名解析
1
2
3
4
5
6# 修改 /etc/hosts cat <<EOF >> /etc/hosts 192.168.6.86 master 192.168.6.87 node1 192.168.6.88 node2 EOF
2.4 安装必要的rpm软件
1
2
3
4## 安装wget vim net-tools epel-release yum install -y wget vim net-tools epel-release ## 安装 nfs-utils,必须先安装 nfs-utils 才能挂载 nfs 网络存储 yum install -y nfs-utils
2.5 关闭防火墙
1
2
3
4
5# 开机禁用 systemctl disable firewalld # 关闭 systemctl stop firewalld
2.6 关闭selinux
1
2
3
4
5# 临时关闭 setenforce 0 # 修改SELINUX的配置文件,关闭SELINUX服务 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
2.7 禁用交换分区
1
2
3
4
5# 临时关闭 swapoff -a # 如需要永久禁用(可选),打开/etc/fstab注释掉swap那一行。 sed -i 's/.*swap.*/#&/' /etc/fstab
2.8 配置网络桥接与路由转发
1
2
3
4
5
6
7
8# 将桥接的IPv4流量传递到iptables的链 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
2.9 配置yum源
1
2
3
4
5
6# 下载阿里源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 更新缓存 yum clean all yum makecache fast
2.10 安装docker
1
2
3# 安装依赖 yum -y install yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看支持的docker版本
1yum list docker-ce --showduplicates | sort -r
指定版本安装
1yum -y install docker-ce-19.03.9-3.el7
设置开机启动
1systemctl enable docker
启动 docker
1systemctl start docker
查看docker服务是否已成功安装并启动
1systemctl status docker
修改配置文件
1
2
3
4
5
6
7
8
9vim /etc/docker/daemon.json # 如果没有就创建 { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": [ "https://alzgoonw.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn" ] }
重启docker服务
1systemctl restart docker
3.安装 kubernetes
注:所有的节点都配置
3.1 添加 Kubernetes 阿里云 yum 源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# [] 中括号中的是repository id,唯一,用来标识不同仓库 # name 仓库名称,自定义 # baseurl 仓库地址 # enable 是否启用该仓库,默认为1表示启用 # gpgcheck 是否验证从该仓库获得程序包的合法性,1为验证 # repo_gpgcheck 是否验证元数据的合法性 元数据就是程序包列表,1为验证 # gpgkey=URL 数字签名的公钥文件所在位置,如果gpgcheck值为1,此处就需要指定gpgkey文件的位置,如果gpgcheck值为0就不需要此项了 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 # 更新缓存 yum clean all yum makecache fast
3.2 安装 kubeadm、kubelet 和 kubectl
1
2
3
4
5
6
7
8# 安装时指定版本号 # kubeadm: 用于初始化集群,启动集群的命令工具 # kubelet:集群中运行任务的代理程序,运行在集群所有节点上,用于启动Pod和容器等对象的工具 # kubectl:命令行管理工具,用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件 yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0 # 设置开机启动 systemctl enable kubelet
3.3 初始化
注:只在master节点配置
1
2
3
4
5
6
7kubeadm init --apiserver-advertise-address=192.168.6.86 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.0 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16 注:修改master IP 、kubernetes 版本
初始化完成后页面最下面会生成 token,之后会用到。
1
2kubeadm join 192.168.6.86:6443 --token dlunzx.pcp4bztwfkbdvdt6 --discovery-token-ca-cert-hash sha256:efac3c4983e3172becf195af5f46c7b18ce438b0e7402f61fcabc30680576f26
使用 kubectl 工具
1
2
3mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看 .kube 目录,会在根目录下面生成 config 文件
1
2ls .kube/ cache config http-cache
3.4 安装pod网络附加组件
注:只在master节点配置
1
2
3
4
5
6# 解决kube-flannel.yml下载不下来问题 # vi /etc/hosts文件添加一条 # 199.232.68.133 raw.githubusercontent.com kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 检查CoreDNS pod是否正常工作(检查STATUS是否为Running) kubectl get pods --all-namespaces -o wide
3.5 加入工作节点
注:node节点配置
在node1,node2节点上执行初始化时日志的输出内容
1
2kubeadm join 192.168.6.86:6443 --token dlunzx.pcp4bztwfkbdvdt6 --discovery-token-ca-cert-hash sha256:efac3c4983e3172becf195af5f46c7b18ce438b0e7402f61fcabc30680576f26
如何移除节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 在控制节点上运行 kubectl drain <node name> --delete-local-data --force --ignore-daemonsets kubectl delete node <node name> # 在要删除的节点上重置kubeadm安装状态 kubeadm reset # 重置过程不会重置或清除iptables规则或IPVS表。如果要重置iptables,必须手动执行 iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X # 如果要重置IPVS表,则必须运行以下命令 ipvsadm -C # 删除kubeconfig文件 rm -f $HOME/.kube/config
3.6 集群扩容增加node节点
kubeadm join 192.168.1.138:6443 --token [TOKEN] --discovery-token-ca-cert-hash sha256:[SHA256]
token可以通过如下命令查看:
kubeadm token list
每个token只有24小时的有效期,如果没有有效的token,可以使用如下命令创建:
kubeadm token create
查看Kubernetes认证的SHA256加密字符串:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
3.7 测试 kubernetes 集群
查看节点的状态
状态为Ready表示和Master节点正常通信
1
2
3
4
5[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 22h v1.15.0 node1 Ready <none> 22h v1.15.0 node2 Ready <none> 22h v1.15.0
查看k8s系统状态
状态为running表示正常
kubectl get pods --all-namespaces -o wide
测试pod
在 Kubernetes 集群中创建一个 pod,验证是否正常运行
1
2
3kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get pod,svc
访问地址:http://NodeIP:Port(本次安装对应地址:http://192.168.6.86:30606)
4.部署Web UI界面(dashboard)
注:master节点部署
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42# 下载kubernetes-dashboard.yaml wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml #编辑kubernetes-dashboard.yaml vi kubernetes-dashboard.yaml # ------------------- Dashboard Deployment ------------------- # spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: k8s-app: kubernetes-dashboard template: metadata: labels: k8s-app: kubernetes-dashboard spec: containers: - name: kubernetes-dashboard # image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1 image: lizhenliang/kubernetes-dashboard-amd64:v1.10.1 # ------------------- Dashboard Service ------------------- # kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: # 新加 type:NodePort type: NodePort ports: - port: 443 targetPort: 8443 # 新加 nodePort: 30001 nodePort: 30001 selector: k8s-app: kubernetes-dashboard
启动kubernetes-dashboard.yaml 文件
1kubectl apply -f kubernetes-dashboard.yaml
所有节点拉取镜像
1docker pull lizhenliang/kubernetes-dashboard-amd64:v1.10.1
查看dashboard运行状态
1kubectl get pods -n kube-system -o wide
查询dashboard端口号
1kubectl get svc -n kube-system -o wide
通过浏览器访问https://192.168.6.86:30001/
谷歌浏览器会报您的连接不是私密连接错误,在当前页面打开的时候点网页任意地方,不是在输入框,不是在输入框,不是在输入框,在chrome该页面上,直接键盘敲入这11个字符:thisisunsafe(鼠标点击当前页面任意位置,让页面处于最上层即可输入),或者使用火狐浏览器。
创建 service account 并绑定默认 cluster-admin 管理员集群角色并生成令牌(仅在master上面操作)
1
2
3kubectl 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可以查看
1kubectl describe secrets -n kube-system dashboard-admin
复制令牌到浏览器中登录
5.安装Heapster
编辑资源文件
heapster.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64apiVersion: v1 kind: ServiceAccount metadata: name: heapster namespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: heapster roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:heapster subjects: - kind: ServiceAccount name: heapster namespace: kube-system --- apiVersion: apps/v1 kind: Deployment metadata: name: heapster namespace: kube-system spec: replicas: 1 selector: matchLabels: k8s-app: heapster template: metadata: labels: task: monitoring k8s-app: heapster spec: serviceAccountName: heapster containers: - name: heapster # image: k8s.gcr.io/heapster-amd64:v1.5.4 将默认google的官方镜像替换为阿里云镜像 image: registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.4 command: - /heapster - --source=kubernetes:https://kubernetes.default?useServiceAccount=true&kubeletHttps=true&kubeletPort=10250&insecure=true --- apiVersion: v1 kind: Service metadata: labels: task: monitoring # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons) # If you are NOT using this as an add-on, you should comment out this line. kubernetes.io/cluster-service: 'true' kubernetes.io/name: Heapster name: heapster namespace: kube-system spec: ports: - port: 80 targetPort: 8082 selector: k8s-app: heapster
heapster-clusterrole.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" labels: kubernetes.io/bootstrapping: rbac-defaults name: system:heapster rules: - apiGroups: - "" resources: - events - namespaces - nodes - pods - nodes/stats verbs: - create - get - list - watch - apiGroups: - extensions resources: - deployments verbs: - get - list - watch
kubectl apply -f heapster.yaml
kubectl apply -f heapster-clusterrole.yaml
效果:
最后
以上就是无奈鸵鸟最近收集整理的关于kubernetes单master集群搭建的全部内容,更多相关kubernetes单master集群搭建内容请搜索靠谱客的其他文章。
发表评论 取消回复