2018-10-31 使用kubeadm启动kubenetes集群更新

Prepare VM

Prepare OS: CentOS7

参考link: https://kubernetes.io/docs/setup/independent/install-kubeadm/

Before you begin

> OS: CentOS 7 
> 2 GB or more of RAM per machine (any less will leave little room for your apps)(安装之前配置)
> 2 CPUs or more(安装之前配置)
> Full network connectivity between all machines in the cluster (public or private network is fine)
> Unique hostname, MAC address, and product_uuid for every node
> Certain ports are open on your machines. See the section below for more details
> Swap disabled. You **MUST** disable swap in order for the kubelet to work properly
### 每个node要有不同的host_name,MAC address和Product_UUID

虚拟机

> .Master: 带界面 
>  Node
> 方法一:在安装CentOS过程中,打开network 设置,在这里设置上述属性
> 方法二:可在shell中更改
> >>hostname       查询主机名y

>打开ssh:sudo yum install openssh-server
ifconfig command not found: sudo yum install net-tools

卸载安装的docker

1. 查询安装的docker
yum list installed | grep docker
docker-engine.x86_64  
2.删除安装的软件包
yum -y remove docker-engine.x86_64 

node安装docker

> 所有的机器以root账户运行
> >>yum install -y docker
> 如果出现无法联网,解决方法如下:
> 方法一 
> 1、打开 vi /etc/sysconfig/network-scripts/ifcfg-eth0(每个机子都可能不一样,但格式会是“ifcfg-eth数字”),把ONBOOT=no,改为ONBOOT=yes
> 2、重启网络:service network restart
> 方法二 
> 1、打开 vi /etc/resolv.conf,增加 nameserver 8.8.8.8 
> 2、重启网络: service network restart 
> 配置docker的group (可选?在我的实践中并没有进行这个配置,但是并没有出现问题) 
> 通过docker inf查看Cgroup Driver: cgroupfs
> docker和kubelet的cgroup driver需要一致,如果docker不是cgroupfs,则执行
> cat << EOF > /etc/docker/daemon.json 
> { 
> "exec-opts": ["native.cgroupdriver=cgroupfs"]
> } 
> EOF 
> systemctl enable docker && systemctl start docker

安装 kubeadm, kubelet 和 kubectl

> **kubeadm the command to bootstrap the cluster** 
> **kubelet the component that run on all of the machines in your cluster and does things like starting pods and containters**
> **kubectl the command line util to talk to your cluster**

安装kubeadm, kubelet和kubect前,需做如下配置

> 配置Kubernetes repo,为了能使用yum来安装kubenetes 
> cat < <EOF < /etc/yum.repos.d/kubernetes.repo
> [kubernetes] 
> name=Kubernetes
> baseurl=[https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64](https://link.jianshu.com/?t=https%3A%2F%2Fpackages.cloud.google.com%2Fyum%2Frepos%2Fkubernetes-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

国内拉Google一般会不成功,可以去下载相关包,再local安装。
local安装细节: https://www.jianshu.com/p/9c7e1c957752

配置及命令

> setenforce 0 关闭SELinux  -- 这个需要修改/etc/selinux/config来彻底关闭SELinux,否则无法正常启动服务,修改了/etc/selinux/config以后需要重启机器来使配置修改生效 
> yum install -y kubelet kubeadm kubectl  
> systemctl enable kubelet && systemctl start kubelet 
> 关闭swap 在每个vi 机器上运行 swapoff -a 
> systemctl stop firewalld.service

运行 创建 cluster

> kubeadm init 进行初始化 
> kubeadm reset: 重置kubeadm状态
> 根据选择的pod network 选择使用一个相应的flag, 对于Flannel 需要使用 --pod-network-cidr=10.244.0.0/16 这是一个固定式无需修改
> kubeadm init --pod-network-cidr=10.244.0.0/16 
> kubeadm 再次运行之前需要先 tearing down cluster: kubeadm reset 
> 如果有两个网卡的话,需要指定network interface --apiserver-advertise-address=<ip-address> 
> 由于使用了Flannel所有这个命令要变种为 kubeadm init --apiserver-advertise-address=192.168.56.102 --pod-network-cidr=10.244.0.0/16 --- 这个命令仅使用与我自己的配置了双网卡的机器 
> 加载配置 
> root 用户 
> export KUBECONFIG=/etc/kubernetes/admin.conf 
> 非 root 用户 
> pod network --- 使DNS服务启动  
> 这里我们用 Flannel配置 iptable sysctl net.bridge.bridge-nf-call-iptables=1
> 应用 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

节点:

> Note节点直接运行 kubuadm init输出的那个kubeadm join 命令来加入master节点
> 注意Node节点上也需要运行 systemctl start kubelet
> 前面一直到初始化,操作都一致
> 查看命令
> kubectl get nodes
> kubectl get pods --all-namespaces

安装Dashboard 服务

> kubectl apply -f[https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml](https://link.jianshu.com/?t=https%3A%2F%2Fraw.githubusercontent.com%2Fkubernetes%2Fdashboard%2Fmaster%2Fsrc%2Fdeploy%2Frecommended%2Fkubernetes-dashboard.yaml)
> 运行 kubectl proxy
> 在master机器上访问[http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/](https://link.jianshu.com/?t=http%3A%2F%2Flocalhost%3A8001%2Fapi%2Fv1%2Fnamespaces%2Fkube-system%2Fservices%2Fhttps%3Akubernetes-dashboard%3A%2Fproxy%2F)
> 运行Dashboard的时候可能需要只让系统保留一个网卡运行,之前两个网卡的时候打不开dashboard,用了一个网卡的环境可以打开
> dashborad网页打开需要输入token 
> 参看网页[https://github.com/kubernetes/dashboard/wiki/Creating-sample-user](https://link.jianshu.com/?t=https%3A%2F%2Fgithub.com%2Fkubernetes%2Fdashboard%2Fwiki%2FCreating-sample-user)
创建admin-user, 创建一个yaml文件并输入以下内容,并运行命令kubectl create -f xxx.yaml
> apiVersion: v1  
>  kind: ServiceAccount  
>  metadata:  
>      name: admin-user 
>      namespace: kube-system
创建 ClusterRoleBinding,创建一个yaml文件并输入以下内容,并运行命令kubectl create -f xxx.yaml
> apiVersion: rbac.authorization.k8s.io/v1beta1  
>     kind: ClusterRoleBinding 
> metadata:  
>     name: admin-user  
> roleRef: 
>     apiGroup: rbac.authorization.k8s.io  
>     kind: ClusterRole  
>     name: cluster-admin  
> subjects:  
>   -  kind: ServiceAccount 
>     name: admin-user 
>     namespace: kube-system
> kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

或者:
kubectl apply -f kubernetes-dashboard-http.yaml 
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml 
[root@master1 kubernetes1.10]# kubectl apply -f kubernetes-dashboard-http.yaml 
serviceaccount "kubernetes-dashboard" created
role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" created 
rolebinding.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" created 
deployment.apps "kubernetes-dashboard" created service "kubernetes-dashboard" created 
[root@master1 kubernetes1.10]# kubectl apply -f admin-role.yaml 
clusterrolebinding.rbac.authorization.k8s.io "kubernetes-dashboard" created 
[root@master1 kubernetes1.10]# kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
 clusterrolebinding.rbac.authorization.k8s.io "dashboard-admin" created

Others:

> 进入 heapster-1.5.0/deploy/kube-config/influxdb 修改grafana.yaml 中的 GF_SERVER_ROOT_URL uncomments apiservier设置 
> 运行sh heapster-1.5.0/deploy/kube.sh start 
> kubectl get pods --all-namespaces 查看所有运行的服务的状态 
> 在使用ss 代理的情况下,需要先把需要的image pull下来 
> docker pull k8s.gcr.io/kube-apiserver-amd64:v1.9.1 
> docker pull k8s.gcr.io/kube-controller-manager-amd64:v1.9.1 
> docker pull k8s.gcr.io/kube-scheduler-amd64:v1.9.1 
> docker pull k8s.gcr.io/kube-proxy-amd64:v1.9.1 
> docker pull k8s.gcr.io/etcd-amd64:3.1.10 
> docker pull k8s.gcr.io/pause-amd64:3.0 
> docker pull k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.7 
> docker pull k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.7 
> docker pull k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.7 
> 在work节点上也需要pull 镜像,只需要pull docker pull k8s.gcr.io/kube-proxy-amd64:v1.9.1 
> 要是服务能够整个的运行需要彻底关闭SELinux,这需要设置 /etc/selinux/config 
> 问题速查: 
> docker logs 查docker运行过程中的问题 
> [https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/](https://link.jianshu.com/?t=https%3A%2F%2Fkubernetes.io%2Fdocs%2Freference%2Fsetup-tools%2Fkubeadm%2Fkubeadm-init%2F) 
> 中文参考 
> 参考[https://mritd.me/2016/10/29/set-up-kubernetes-cluster-by-kubeadm/#21%E5%AE%89%E8%A3%85%E5%8C%85%E4%BB%8E%E5%93%AA%E6%9D%A5](https://link.jianshu.com/?t=https%3A%2F%2Fmritd.me%2F2016%2F10%2F29%2Fset-up-kubernetes-cluster-by-kubeadm%2F%2321%25E5%25AE%2589%25E8%25A3%2585%25E5%258C%2585%25E4%25BB%258E%25E5%2593%25AA%25E6%259D%25A5) 
> 运行init成功的例子: 
> Your Kubernetes master has initialized successfully!
>  You should now deploy a pod network to the cluster. 
> Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: 
> [https://kubernetes.io/docs/concepts/cluster-administration/addons/](https://link.jianshu.com/?t=https%3A%2F%2Fkubernetes.io%2Fdocs%2Fconcepts%2Fcluster-administration%2Faddons%2F) 
> You can now join any number of machines by running the following on each node 
> as root: 
> kubeadm join --token cb327c.f171b1e736a5184e 192.168.56.102:6443 --discovery-token-ca-cert-hash sha256:392545adad830f474ee0409691d1cb9a6d8f2499decdd903c788ccb60e2cb247

额外参考: https://www.jianshu.com/p/9c7e1c957752

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容