kubeadm 部署 kube1.10【转】

https://blog.csdn.net/golduty2/article/details/80700491

 

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
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服务配置文件

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

[Service]
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,添加如下内容:

[Service]
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服务

systemctl daemon-reload && systemctl restart docker
⑤ 查看是否配置成功

[root@master k8s]# systemctl show --property=Environment docker | more
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文件,追加如下内容:
proxy=http://127.0.0.1:8118
② 更新yum缓存

yum makecache #---这一步会全部更新一遍,很耗流量,尽量还是不做吧,而且我发现yum可以被全局代理所代理,所以需要yum的时候开一下全局试试
配置wget代理 
编辑/etc/wgetrc文件,追加如下内容:
ftp_proxy=http://127.0.0.1:8118
http_proxy=http://127.0.0.1:8118
https_proxy=http://127.0.0.1:8118
配置全局代理 
如需上网,可编辑/etc/profile文件,追加如下内容:
PROXY_HOST=127.0.0.1
export all_proxy=http://$PROXY_HOST:8118
export ftp_proxy=http://$PROXY_HOST:8118
export http_proxy=http://$PROXY_HOST:8118
export https_proxy=http://$PROXY_HOST:8118
export no_proxy=localhost,192.168.0.0/16.,127.0.0.1,10.10.0.0/16
注: 部署Kubernetes时需禁用全局代理,会导致访问内部服务失败。

4.2 下载软件包和镜像
下载kubeadm、kubectl、kubelet
wget https://storage.googleapis.com/kubernetes-release/release/v1.8.1/bin/linux/amd64/kubeadm
wget https://storage.googleapis.com/kubernetes-release/release/v1.8.1/bin/linux/amd64/kubectl
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 推送本地镜像到镜像仓库
上传镜像
docker login -u xxxxxx@163.com -p xxxxxx hub.c.163.com
docker tag gcr.io/google_containers/kube-apiserver-amd64:v1.8.1 hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1
docker push hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1
docker rmi hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1
docker logout hub.c.163.com
下载镜像
docker pull hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1
docker tag hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1 gcr.io/google_containers/kube-apiserver-amd64:v1.8.1
docker rmi hub.c.163.com/xxxxxx/kube-apiserver-amd64:v1.8.1
docker logout hub.c.163.com
更新镜像
docker update --restart=no $(docker ps -q) && docker stop $(docker ps -q) && docker rm $(docker ps -q)
4.4 kubeadm init错误
错误描述
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "nodes is forbidden: User \"system:anonymous\" cannot list nodes at the cluster scope",
"reason": "Forbidden",
"details": {
"kind": "nodes"
},
"code": 403
}
问题原因 
该节点在/etc/profile中配置了全局代理,kubectl访问kube-apiserver也通过代理转发请求,导致证书不对,连接拒绝。

解决方法 
取消全局代理,只配置Docker代理、yum代理、wget代理。 
参考4.1。
---------------------
作者:golduty2
来源:CSDN
原文:https://blog.csdn.net/golduty2/article/details/80700491
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2018-10-31 23:21  流水剑客  阅读(182)  评论(0编辑  收藏  举报