kubeadm 部署 kube1.10

kubeadm是官方提供的安装方案,比纯手工安装方便。 

零 准备

在安装前需做些设置让系统环境一致,确保后面顺利安装。

0.0 硬件情况

系统:centos 7 
用户: root 
机器规划:

角色数量配置物理iphostname
master14核 16G172.16.93.220k8s
node14核 16G172.16.89.34cs-k8s-34
node14核 16G172.16.89.35cs-k8s-35

硬件配置参考:CPU 2核或以上,内存2GB或以上。 
机器最好都在同一个局域网,在三台机器上都设置好hostname

0.1 配置代理

参考:centos7下终端使用代理 
配置yum使用代理

echo "proxy=http://127.0.0.1:8118" >> /etc/yum.conf
  • 1

这里注意下,终端不需要使用代理,配置完启动Privoxy即可。

0.2 系统设置

0.2.1 关闭防火墙吧,省事点,如果处于安全考虑,注意后面要开放端口。

systemctl stop firewalld
systemctl disable firewalld
  • 1
  • 2

0.2.2 关闭swap内存

swapoff -a
  • 1

修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认swap已经关闭。 
0.2.3 关闭selinux

vim /etc/sysconfig/selinux
将SELINUX修改为disabled
  • 1
  • 2

运行

setenforce 0
  • 1

0.3 调整内核参数-----这一步我没做,这是iptable防火墙的,我没装

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
  • 1
  • 2
  • 3
  • 4
sudo sysctl --system
  • 1

一 安装

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
  • 2
  • 3
  • 4

1.1 安装docker

yum install -y docker
systemctl enable docker 
systemctl start docker
  • 1
  • 2
  • 3

配置docker代理  ----------------全局代理没用,得用这个代理配合ss

mkdir -p /etc/systemd/system/docker.service.d
  • 1

添加如下内容到/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"
  • 1
  • 2

添加如下内容到/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"
  • 1
  • 2

启动docker

systemctl daemon-reload && systemctl restart docker
  • 1

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

开始安装

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && sudo systemctl start kubelet
  • 1
  • 2

至此,在所有机器上安装所需的软件已经结束。

二 在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   # 不写version就会装最新的1.10
  • 1

等待执行完成后,会看到类似如下的提示,非常友好

kubeadm join --token 2fae1b.e4306e679794caaf 172.16.93.220:6443 --discovery-token-ca-cert-hash sha256:26d12811d5a60ecd91ba6bfea03daa34460d6143ceb11777179fd02e09f0ad16
  • 1

这行内容先记录下,等下节点添加的时候要使用。 
如果初始化失败,可以重置下,再初始化

kubeadm reset  #------注意用完这个,重装之后,可能遇到kubectl显示认证不过无法使用,这是多执行一次屏幕回显的注册adminconf指令那几条,就ok了
  • 1

2.1 添加K8S配置  ----- 装完按照屏幕回显操作即可,不用复制这里的,每个版本不一样

export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
  • 1
  • 2

2.2 安装network addon

要docker之间能互相通信需要做些配置,这里用Flannel来实现 -----中间版本的地方换成master就是安装最新的

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
  • 1

安装完成后,检查下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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

刚开始时是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
  • 1

顺利的话可以看到类似如下的提示

Run 'kubectl get nodes' on the master to see this node join the cluster.
  • 1

回到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
  • 1
  • 2
  • 3
  • 4
  • 5

可以看到两个节点都已经加入了,并且是正常的ready状态。 
至此,整个集群的配置完成,可以开始使用了。

四 配置dashboard

默认是没web界面的,可以在master机器上安装一个dashboard插件,实现通过web来管理

4.0 下载配置文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
  • 1

编辑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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

4.1 安装Dashboard插件

kubectl create -f kubernetes-dashboard.yaml
  • 1

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

执行命令

kubectl create -f kubernetes-dashboard-admin.rbac.yaml
  • 1

找到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
  • 1
  • 2

可以看到名称是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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

记下这串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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

可以看到它对外的端口为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 ./
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

安装完成后,重新登录即可看到。

六 后记

在安装的时候参考了这两篇文章,节省了很多时间,感谢。 
使用kubeadm在CentOS 7上安装Kubernetes 1.8 

使用 kubeadm 创建 kubernetes 1.9 集群



补充代理:


使用代理科学上网

  • 使用boslife的ss服务,自己安装shadowsocks,参见上一篇博客

  • 配置Docker代理 
    ① 创建docker服务配置文件

  1. mkdir -p /etc/systemd/system/docker.service.d

② 编辑vi /etc/systemd/system/docker.service.d/http-proxy.conf,添加如下内容:

  1. [Service]
  2. Environment="HTTP_PROXY=http://127.0.0.1:8118" "NO_PROXY=localhost,*.192.168.0.0/16,127.0.0.1,10.244.0.0/16"

③ 编辑/etc/systemd/system/docker.service.d/https-proxy.conf,添加如下内容:

  1. [Service]
  2. Environment="HTTPS_PROXY=https://127.0.0.1:8118" "NO_PROXY=localhost,*.192.168.0.0/16,127.0.0.1,10.244.0.0/16"

④ 重启Docker服务

  1. systemctl daemon-reload && systemctl restart docker

⑤ 查看是否配置成功

  1. [root@master k8s]# systemctl show --property=Environment docker | more
  2. Environment=HTTP_PROXY=http://127.0.0.0.1:8118 NO_PROXY=localhost,192.168.0.0/16,127.0.0.1,10.244.0.0/16 HTTPS_PROXY=https://127.
  • 配置yum代理 
    ① 编辑/etc/yum.conf文件,追加如下内容:
  1. proxy=http://127.0.0.1:8118

② 更新yum缓存

  1. yum makecache #---这一步会全部更新一遍,很耗流量,尽量还是不做吧,而且我发现yum可以被全局代理所代理,所以需要yum的时候开一下全局试试
  • 配置wget代理 
    编辑/etc/wgetrc文件,追加如下内容:
  1. ftp_proxy=http://127.0.0.1:8118
  2. http_proxy=http://127.0.0.1:8118
  3. https_proxy=http://127.0.0.1:8118
  • 配置全局代理 
    如需上网,可编辑/etc/profile文件,追加如下内容:
  1. PROXY_HOST=127.0.0.1
  2. export all_proxy=http://$PROXY_HOST:8118
  3. export ftp_proxy=http://$PROXY_HOST:8118
  4. export http_proxy=http://$PROXY_HOST:8118
  5. export https_proxy=http://$PROXY_HOST:8118
  6. export no_proxy=localhost,192.168.0.0/16.,127.0.0.1,10.10.0.0/16

注: 部署Kubernetes时需禁用全局代理,会导致访问内部服务失败。

4.2 下载软件包和镜像

  • 下载kubeadm、kubectl、kubelet
  1. wget https://storage.googleapis.com/kubernetes-release/release/v1.8.1/bin/linux/amd64/kubeadm
  2. wget https://storage.googleapis.com/kubernetes-release/release/v1.8.1/bin/linux/amd64/kubectl
  3. wget https://storage.googleapis.com/kubernetes-release/release/v1.8.1/bin/linux/amd64/kubelet

参考链接:https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-binary-via-curl

4.3 推送本地镜像到镜像仓库

  • 上传镜像
  1. docker login -u xxxxxx@163.com -p xxxxxx hub.c.163.com
  2. docker tag gcr.io/google_containers/kube-apiserver-amd64:v1.8.1 hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1
  3. docker push hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1
  4. docker rmi hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1
  5. docker logout hub.c.163.com
  • 下载镜像
  1. docker pull hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1
  2. docker tag hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1 gcr.io/google_containers/kube-apiserver-amd64:v1.8.1
  3. docker rmi hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1
  4. docker logout hub.c.163.com
  • 更新镜像
  1. docker update --restart=no $(docker ps -q) && docker stop $(docker ps -q) && docker rm $(docker ps -q)

4.4 kubeadm init错误

  • 错误描述
  1. {
  2. "kind": "Status",
  3. "apiVersion": "v1",
  4. "metadata": {
  5. },
  6. "status": "Failure",
  7. "message": "nodes is forbidden: User \"system:anonymous\" cannot list nodes at the cluster scope",
  8. "reason": "Forbidden",
  9. "details": {
  10. "kind": "nodes"
  11. },
  12. "code": 403
  13. }
  • 问题原因 
    该节点在/etc/profile中配置了全局代理,kubectl访问kube-apiserver也通过代理转发请求,导致证书不对,连接拒绝。

  • 解决方法 
    取消全局代理,只配置Docker代理、yum代理、wget代理。 
    参考4.1。


没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试