Kubernetes 1.6到1.7升级记录

文章目录

[隐藏]

  • 准备
  • 使用ansible升级k8s的核心组件
  • 以容器形式运行组件的升级
    • 升级kube-dns的注意事项
    • 升级dashboard的注意事项

最近正在制定将团队生产环境的Kubernetes集群从1.6升级1.7的计划。 Kubernetes 1.8已经发布,所以准备考虑从1.6到1.7的升级。

准备

当前1.7的最新版本是1.7.8。在做准备之前需要仔细读一遍官方的Kubernetes 1.7 (https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.7.md#action-required-before-upgrading)。

使用ansible升级k8s的核心组件

目前我们总共有两个高可用的Kubernetes集群,分别是测试环境和生产环境,版本都是1.6.10。 这两套环境的Kubernetes集群都是基于ansible自动部署,在1.6.x的每个小版本的升级也都是使用ansible完成。

这里准备的升级步骤是本地VM环境 => 测试环境 => 生产环境。 先使用ansible在本地VM中部署k8s 1.6.10的集群,然后再使用ansible将本地1.6升级到1.7并做一些验证,再升级测试环境,测试环境稳定运行一段时间后完成生产环境的升级。

本地VM环境中的ansible play的十分顺利,集群的各个核心组件已经成功的升级到1.7.8。

以容器形式运行组件的升级

接下来要对一些以容器形式运行的组件升级,对应版本如下:

  • flannel 0.9.0
  • kube-dns 1.14.5
  • dashboard 1.7.1

升级kube-dns的注意事项

kube-dns 1.14.5部署文件的地址在gitlab中发生了变化,在内容上使用Deployment替换了Replication Controller。

wget https://raw.githubusercontent.com/kubernetes/kubernetes/e1d6bcc22736a15ce662b3bd1009a16cdde5cd86/cluster/addons/dns/kube-dns.yaml.base  wget https://raw.githubusercontent.com/kubernetes/kubernetes/e1d6bcc22736a15ce662b3bd1009a16cdde5cd86/cluster/addons/dns/transforms2sed.sed  

查看transforms2sed.sed:

s/__PILLAR__DNS__SERVER__/$DNS_SERVER_IP/g  s/__PILLAR__DNS__DOMAIN__/$DNS_DOMAIN/g  s/__MACHINE_GENERATED_WARNING__/Warning: This is a file generated from the base underscore template file: __SOURCE_FILENAME__/g  

将$DNS_SERVER_IP替换成10.96.0.10,将DNS_DOMAIN替换成cluster.local。 注意$DNS_SERVER_IP要和kubelet设置的–cluster-dns参数一致

执行:

cd ~/k8s/kube-dns  sed -f transforms2sed.sed kube-dns.yaml.base > kube-dns.yaml  
  • 上面的变量DNS_SERVER要和kubelet设置的–cluster-dns参数一致。
kubectl create -f kube-dns.yaml  

查看kube-dns的Pod,确认所有Pod都处于Running状态:

kubectl get pods --all-namespaces  NAMESPACE     NAME                                    READY     STATUS    RESTARTS   AGE  kube-system   kube-dns-3468831164-chjw5               3/3       Running   0          3m  

测试一下DNS功能是否好用:

kubectl run curl --image=radial/busyboxplus:curl -i --tty    nslookup kubernetes.default  Server:    10.96.0.10  Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local    Name:      kubernetes  Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local  

kube-dns是Kubernetes实现服务发现的重要组件之一,默认情况下只会创建一个DNS Pod,在生产环境中我们可能需要对kube-dns进行扩容。 有两种方式:

  • 手动扩容 kubectl –namespace=kube-system scale deployment kube-dns –replicas=

  • 使用DNS Horizontal Autoscaler

升级dashboard的注意事项

因为之前部署Dashboard 1.6时创建了ServiceAccount kubernetes-dashboard,并分配了cluster-admin的权限。 所以在升级前应该先删除掉这个ServiceAccount:

kubectl delete  serviceaccount kubernetes-dashboard -n kube-system  kubectl delete  clusterrolebinding kubernetes-dashboard  

1.7.x版本的dashboard对安全做了增强,默认需要以https的方式访问,增加了登录的页面,同时增加了一个gcr.io/google_containers/kubernetes-dashboard-init-amd64的init容器。

另外需要注意dashboard调整了部署文件的源码目录结构:

mkdir -p ~/k8s/  wget https://raw.githubusercontent.com/kubernetes/dashboard/b44f7cc5fde4dbe2a884b1e32a2b363d8031e4ca/src/deploy/recommended/kubernetes-dashboard.yaml  kubectl create -f kubernetes-dashboard.yaml  

kubernetes-dashboard.yaml文件中的ServiceAccount kubernetes-dashboard只有相对较小的权限,因此我们创建一个kubernetes-dashboard-admin的ServiceAccount并授予集群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  serviceaccount "kubernetes-dashboard-admin" created  clusterrolebinding "kubernetes-dashboard-admin" created  

查看kubernete-dashboard-admin的token:

kubectl -n kube-system get secret | grep kubernetes-dashboard-admin  kubernetes-dashboard-admin-token-mrngz   kubernetes.io/service-account-token   3         18m    kubectl describe -n kube-system secret kubernetes-dashboard-admin-token-mrngz  Name:           kubernetes-dashboard-admin-token-mrngz  Namespace:      kube-system  Labels:         <none>  Annotations:    kubernetes.io/service-account.name=kubernetes-dashboard-admin                  kubernetes.io/service-account.uid=906d3aa6-b06d-11e7-afdd-080027d9d784    Type:   kubernetes.io/service-account-token    Data  ====  ca.crt:         1302 bytes  namespace:      11 bytes  token:          ......  

在dashboard的登录窗口使用上面的token登录。

原文出处:frognew -> http://blog.frognew.com/2017/10/upgrade-kubernetes-from-1.6-to-1.7.html

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。