使用 kubeadm 安装部署 kubernetes 1.9
kubeadm是官方提供的安装方案,比纯手工安装方便。零 准备在安装前需做些设置让系统环境一致,确保后面顺利安装。0.0 硬件情况系统:centos 7用户: root机器规划:角色数量配置物理iphostnamemaster14核 16G172.16.93.220k8snod
kubeadm是官方提供的安装方案,比纯手工安装方便。
零 准备
在安装前需做些设置让系统环境一致,确保后面顺利安装。
0.0 硬件情况
系统:centos 7
用户: root
机器规划:
角色 | 数量 | 配置 | 物理ip | hostname |
---|---|---|---|---|
master | 1 | 4核 16G | 172.16.93.220 | k8s |
node | 1 | 4核 16G | 172.16.89.34 | cs-k8s-34 |
node | 1 | 4核 16G | 172.16.89.35 | cs-k8s-35 |
硬件配置参考:CPU 2核或以上,内存2GB或以上。
机器最好都在同一个局域网,在三台机器上都设置好hostname
0.1 配置代理
参考:centos7下终端使用代理
配置yum使用代理
echo "proxy=http://127.0.0.1:8118" >> /etc/yum.conf
这里注意下,终端不需要使用代理,配置完启动Privoxy即可。
0.2 系统设置
0.2.1 关闭防火墙吧,省事点,如果处于安全考虑,注意后面要开放端口。
systemctl stop firewalld
systemctl disable firewalld
0.2.2 关闭swap内存
swapoff -a
修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认swap已经关闭。
0.2.3 关闭selinux
vim /etc/sysconfig/selinux
将SELINUX修改为disabled
运行
setenforce 0
0.3 调整内核参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
一 安装
1.0 版本选择
三台机器都需安装docker, kubeadm, kubelet和kubectl
版本如下:
docker-1.12.6-68
kubelet-1.9.0-0.x86_64
kubectl-1.9.0-0.x86_64
kubeadm-1.9.0-0.x86_64
1.1 安装docker
yum install -y docker
systemctl enable docker
systemctl start docker
配置docker代理
mkdir -p /etc/systemd/system/docker.service.d
添加如下内容到/etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8118" "NO_PROXY=localhost,172.16.0.0/16,127.0.0.1,10.244.0.0/16"
添加如下内容到/etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment="HTTPS_PROXY=https://127.0.0.1:8118" "NO_PROXY=localhost,172.16.0.0/16,127.0.0.1,10.244.0.0/16"
启动docker
systemctl daemon-reload && systemctl restart docker
1.2 安装kubeadm, kubelet和kubectl
配置kubernetes源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
开始安装
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && sudo systemctl start kubelet
至此,在所有机器上安装所需的软件已经结束。
二 在master上配置
2.0 初始化K8S
通过kubeadm init命令来初始化,指定一下kubernetes版本,并设置一下pod-network-cidr。
kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16
等待执行完成后,会看到类似如下的提示,非常友好
kubeadm join --token 2fae1b.e4306e679794caaf 172.16.93.220:6443 --discovery-token-ca-cert-hash sha256:26d12811d5a60ecd91ba6bfea03daa34460d6143ceb11777179fd02e09f0ad16
这行内容先记录下,等下节点添加的时候要使用。
如果初始化失败,可以重置下,再初始化
kubeadm reset
2.1 添加K8S配置
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
2.2 安装network addon
要docker之间能互相通信需要做些配置,这里用Flannel来实现
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
安装完成后,检查下kube-dns是否安装成功。kube-dns比较重要,它负责整个集群的解析,要确保它正常运行。使用kubectl get pods –all-namespaces命令查看
[root@k8s ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default redis-test-9b545dd64-8v5mv 1/1 Running 0 1d
kube-system etcd-k8s 1/1 Running 1 2d
kube-system heapster-5c448886d-z9j4n 1/1 Running 0 1d
kube-system kube-apiserver-k8s 1/1 Running 1 2d
kube-system kube-controller-manager-k8s 1/1 Running 1 2d
kube-system kube-dns-6f4fd4bdf-pp8bg 3/3 Running 3 2d
kube-system kube-flannel-ds-2xmhn 1/1 Running 3 2d
kube-system kube-flannel-ds-rdnwn 1/1 Running 2 2d
kube-system kube-flannel-ds-sqltw 1/1 Running 1 2d
kube-system kube-proxy-4zbrs 1/1 Running 2 2d
kube-system kube-proxy-d4mpm 1/1 Running 1 2d
kube-system kube-proxy-drcf7 1/1 Running 2 2d
kube-system kube-scheduler-k8s 1/1 Running 1 2d
刚开始时是Pending状态,之后可以看到kube-dns-6f4fd4bdf-pp8bg为running状态。
至此,master部分的配置就完成了。
三 node加入集群
登录172.16.89.34和172.16.89.35,执行刚才记录的那一行命令
kubeadm join --token 2fae1b.e4306e679794caaf 172.16.93.220:6443 --discovery-token-ca-cert-hash sha256:26d12811d5a60ecd91ba6bfea03daa34460d6143ceb11777179fd02e09f0ad16
顺利的话可以看到类似如下的提示
Run 'kubectl get nodes' on the master to see this node join the cluster.
回到master机器上,运行该命令查看结果
[root@k8s ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
cs-k8s-34 Ready <none> 2d v1.9.0
cs-k8s-35 Ready <none> 2d v1.9.0
k8s Ready master 2d v1.9.0
可以看到两个节点都已经加入了,并且是正常的ready状态。
至此,整个集群的配置完成,可以开始使用了。
四 配置dashboard
默认是没web界面的,可以在master机器上安装一个dashboard插件,实现通过web来管理
4.0 下载配置文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
编辑kubernetes-dashboard.yaml文件,添加type: NodePort,暴露Dashboard服务。注意这里只添加行type: NodePort即可,其他配置不用改,大概位置在末尾的Dashboard Service的spec中,162行,参考如下。
# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
4.1 安装Dashboard插件
kubectl create -f kubernetes-dashboard.yaml
4.2 授予Dashboard账户集群管理权限
需要一个管理集群admin的权限,新建kubernetes-dashboard-admin.rbac.yaml文件,内容如下
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-admin
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-admin
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard-admin
namespace: kube-system
执行命令
kubectl create -f kubernetes-dashboard-admin.rbac.yaml
找到kubernete-dashboard-admin的token,用户登录使用
执行命令
[root@k8s ~]# kubectl -n kube-system get secret | grep kubernetes-dashboard-admin
kubernetes-dashboard-admin-token-ddskx kubernetes.io/service-account-token 3 1d
可以看到名称是kubernetes-dashboard-admin-token-ddskx,使用该名称执行如下命令
[root@k8s ~]# kubectl describe -n kube-system secret/kubernetes-dashboard-admin-token-ddskx
Name: kubernetes-dashboard-admin-token-ddskx
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=kubernetes-dashboard-admin
kubernetes.io/service-account.uid=3e70cc52-f121-11e7-a359-52540059e4c5
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbi10b2tlbi1kZHNreCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjNlNzBjYzUyLWYxMjEtMTFlNy1hMzU5LTUyNTQwMDU5ZTRjNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiJ9.vz7xBUDYoIfeR83BfbUKAWFiKUAgTen7GP9b7d2nmcNIwAht6Xl6OaC-vjC66gaBD9Y-1ljb384jUoHQ0wCxE4tNFE8G5FR7-xbt-OpFt5razy28QIZYzeK_cP5af5RcdacYwWIRGHdPAp8Ki2dGNTqXMNL-0ySosCvNisTNgzvn0XbggLmXGYLfluNm75aitJFuzR3tOtKd-2qL27jccOtDE_MtE4zRQ-X5ikHT2vQGOEfLGaukbFN211AFVPe6Vgp18TJM3kTc0Yom5947ZB1E660IP4mCatMwHDadutb662rNJGSn65shrBua9u7yBK9xWQ_asAjHfZGKhdO2wg
记下这串token,等下登录使用,这个token默认是永久的。
4.3 找出Dashboard服务端口
[root@k8s ~]# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
heapster ClusterIP 10.103.146.118 <none> 80/TCP 1d
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 2d
kubernetes-dashboard NodePort 10.103.190.189 <none> 443:31472/TCP 1d
monitoring-grafana ClusterIP 10.109.25.3 <none> 80/TCP 1d
monitoring-influxdb ClusterIP 10.109.165.19 <none> 8086/TCP 1d
可以看到它对外的端口为31472。
打开浏览器,访问https://172.16.93.220:31472/#!/login,选择令牌,输入刚才的token即可进入
界面如下
上图的图表需要安装heapster仪表盘插件才能看到
五 部署heapster插件
mkdir -p ~/k8s/heapster
cd ~/k8s/heapster
wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/grafana.yaml
wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml
wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml
wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml
kubectl create -f ./
安装完成后,重新登录即可看到。
六 后记
在安装的时候参考了这两篇文章,节省了很多时间,感谢。
使用kubeadm在CentOS 7上安装Kubernetes 1.8
使用 kubeadm 创建 kubernetes 1.9 集群
更多推荐
所有评论(0)