使用kubeadmin部署k8s集群

修订记录

概念篇


1、云原生和微服务

云计算包含的内容十分繁杂,也有很多技术和公司牵强附会说自己是云计算公司,说自己是做云的,实际上可能风马牛不相及。说白了,云计算就是一种配置资源的方式,根据资源配置方式的不同我们可以把云计算从宏观上分为以下三种类型:

  • IaaS:基础设施即服务,通过虚拟化和分布式存储等技术,实现了对包括服务器、存储设备、网络设备等各种物理资源的抽象,从而形成了一个可扩展、可按需分配的虚拟资源池。例如亚马逊的EC2、S3存储、Rackspace虚拟机、阿里云ECS等都是IaaS。
  • PaaS:平台即服务,工具和服务的集合,为开发者提供了应用的开发环境和运行环境,将开发者从繁琐的IT环境管理中解放出来,比如Cloud Foundry、Google App Engine、Heroku等。
  • SaaS:软件即服务,终端用户可以直接使用的应用程序。这个就太多,我们生活中用到的很多软件都是SaaS服务,只要基于互联网来提供的服务基本都是SaaS服务,有的服务是免费的,比如Google Docs,还有更多的是根据我们购买的Plan和使用量付费,比如GitHub、各种云存储。

简而言之,SaaS通过网络运行,为最终用户提供应用服务;PaaS是一套工具服务,为编码和部署应用程序提供快速、高效的服务;IaaS包括硬件和软件,例如服务器、存储、网络和操作系统。

1.1 云原生

2015年谷歌成立了原生云计算基金会(CNCF),目前基金会成员包含Box、华为、思科、Docker、eBay、IBM、英特尔、红帽、Twitter、VMware、三星等70多家成员。
CNCF认为CloudNative系统需包含的属性:

  • 容器化封装:以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用程序和进程,并作为应用程序部署的独立单元,实现高水平资源隔离。
  • 自动化管理:统一调度和管理中心,从根本上提高系统和资源利用率,同时降低运维成本。
  • 面向微服务:通过松耦合方式,提升应用程序的整体敏捷性和可维护性。


自从云的概念开始普及,许多公司都部署了实施云化的策略,纷纷搭建起云平台,希望完成传统应用到云端的迁移。但是这个过程中会遇到一些技术难题,上云以后,效率并没有变得奇高,故障也没有迅速定位。
为了解决传统应用升级缓慢、架构臃肿、不能快速迭代、故障不能快速定位、问题无法快速解决等问题,云原生这一概念横空出世。云原生可以改进应用开发的效率,改变企业的组织结构,甚至会在文化层面上直接影响一个公司的决策。
另外,云原生也很好地解释了云上运行的应用应该具备什么样的架构特性——敏捷性、可扩展性、故障可恢复性。
综上所述,云原生应用应该具备以下几个关键词:

  • 敏捷
  • 可靠
  • 高弹性
  • 易扩展
  • 故障隔离保护
  • 不中断业务持续更新

以上特性也是云原生区别于传统云应用的优势特点。
从宏观概念上讲,云原生是不同思想的集合,集目前各种热门技术之大成。

1.2 微服务

服务是一种分布式架构设计理念,为了推动细粒度服务的使用,这些服务要能协同工作,每个服务都有自己的生命周期。一个微服务就是一个独立的实体,可以独立的部署在PAAS平台上,也可以作为一个独立的进程在主机中运行。服务之间通过API访问,修改一个服务不会影响其它服务。

2、Kubernetes简介

Kubernetes(K8S,为什么叫K8S,即k8个字母s)是谷歌开源的容器集群管理系统,是谷歌多年大规模容器管理技术Borg的开源版本,主要功能包括:

  • 基于容器的应用部署、维护和滚动升级;
  • 负载均衡和服务发现;
  • 跨机器和跨地区的集群调度;
  • 自动伸缩;
  • 无状态服务和有状态服务;
  • 广泛的Volume支持;
  • 插件机制保证扩展性;

2.1 Borg简介

Borg是谷歌内部的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理。Borg的目的是让用户能够不必操心资源管理的问题,让他们专注于自己的核心业务,并且做到跨多个数据中心的资源利用率最大化。
Borg主要由BorgMaster、Borglet、borgcfg和Scheduler组成,如下图所示:

  • BorgMaster是整个集群的大脑,负责维护整个集群的状态,并将数据持久化到Paxos存储中;
  • Scheduer负责任务的调度,根据应用的特点将其调度到具体的机器上去;
  • Borglet负责真正运行任务(在容器中);
  • borgcfg是Borg的命令行工具,用于跟Borg系统交互,一般通过一个配置文件来提交任务。

2.2 K8S架构

Kubernetes借鉴了Borg的设计理念,比如Pod、Service、Labels和单Pod单IP等。Kubernetes的整体架构跟Borg非常像,如下图所示


k8s主要由以下几个核心组件组成:

  • etcd:保存了整个集群的状态;
  • apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡,默认使用iptables做转发,可以修改为ipvs(目前1.9版本支持);
  • kube-dns:负责为整个集群提供DNS服务;
  • Ingress Controller:为服务提供外网入口;
  • Heapster:提供资源监控;
  • Dashboard:提供GUI;
  • Federation:提供跨可用区的集群;
  • kube-router:功能类似kube-router,可以代替kube-proxy,默认使用ipvs做service负载均衡;

http://www.k8smeetup.com/article/NyQFBDMHN

3、Kubernetes命令

Command line tool (kubectl) | Kubernetes

集群部署篇


在线部署方式参考:使用kubeadm安装Kubernetes 1.8版本_Kubernetes中文社区
由于国内GFW的关系,在国内在线部署K8S比较困难,so需要一点套路来解决。

1、环境

主机名

外网IP

内网IP

系统

k8s-master

192.168.110.75

172.16.2.55

CentOS 7.4.1708

k8s-node-01

192.168.110.76

172.16.2.56

CentOS 7.4.1708

k8s-node-02

192.168.110.77

172.16.2.57

CentOS 7.4.1708

注:已关闭防火墙和selinux。

1

2

3

echo "192.168.110.76 k8s-node-01">>/etc/hosts

echo "192.168.110.75 k8s-master">>/etc/hosts

echo "192.168.110.77 k8s-node-02">>/etc/hosts

1.1 dockr安装

Kubernetes 1.9.0已经针对docker17.03.2版本做了验证。 因为我们这里在各节点安装docker的17.03.2版本。
在电脑上下载好docker安装包,docker1.17.03下载地址: https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
上传到所有节点,并执行:

1

2

yum -y localinstall dock*

systemctl enable docker.service

若出现以下错误:

1

2

3

Error: docker-ce-selinux conflicts with 2:container-selinux-2.33-1.git86f33cd.el7.noarch

 You could try using --skip-broken to work around the problem

 You could try running: rpm -Va --nofiles –nodigest

解决

1

rpm -e container-selinux-2.33-1.git86f33cd.el7.noarch


1.2 关闭swap

Kubernetes 1.8开始要求关闭系统的swap,如果不关闭,默认配置下kubelet将无法启动。阿里云ECS默认是关闭swap的,所以这步骤可以不执行。

1

swapoff -a


1.3 安装ebtables socat依赖包

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

1

yum install -y ebtables socat

1.4 修改iptables规则

Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信,在各个Docker节点执行下面的命令:

1

iptables -P FORWARD ACCEPT

1.5 关闭firewalld

为了在部署的时候避免一些不必要的麻烦,先关闭firewalld:

1

2

systemctl stop firewalld

systemctl disable firewalld

2、安装K8S

所有离线安装包和yaml文件均放在阿里云nfs的images目录下。

2.1 安装kubelet kubeadm kubectl

上传离线包至k8s目录下,并解压:

1

2

3

mkdir /opt/k8s

cd /opt/k8s

tar zxvf k8s1.9.0.rpm.tar.gz


安装:

1

yum -y localinstall kub*


2.2 修改各节点docker的配置文件

exec-opts:安装kubelet,kubeadm时生成10-kubeadm.conf文件中将这个参数值为systemd,而docker 17.03使用的Cgroup Driver为cgroupfs, 修改各节点docker的cgroup driver使其一致;
registry-mirrors:阿里云镜像加速;
insecure-registry:本地私有仓库,若不加这个参数,会导致无法登陆私有仓库;
graph:docker镜像和容器默认存储目录,由于镜像文件数量多,文件也不小,默认是放在/var/lib/docker,很快系统盘就会耗尽,所以需要修改该目录,挂在数据盘上。

1

mkdir /etc/dockercat <<EOF>/etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://cn5owbch.mirror.aliyuncs.com"], "insecure-registry": ["172.16.2.55"], "graph""/alidata/docker" } EOF

修改/usr/lib/systemd/system/docker.service中的ExecStart:

1

ExecStart=/usr/bin/dockerd --insecure-registry 172.16.2.55 

注:--insecure-registry 172.16.2.55参数用于登录私有仓库。
重启docker:

1

2

3

systemctl daemon-reload

systemctl restart docker

systemctl status docker

2.3 启动 kubelet

在各节点启动 kubelet:

1

systemctl enable kubelet && systemctl start kubelet

2.4 导入相关镜像

2.4.1 master

1

2

3

mkdir -p /opt/master/

cd /opt/master

tar zxvf k8s1.9.0-images-master.tar.gz

导入镜像:

1

2

3

4

5

6

7

8

9

10

11

12

cd images

docker load<coredns.tar.gz

docker load<etcd-amd64.tar.gz

docker load<flannel.tar.gz

docker load<k8s-dns-dnsmasq-nanny-amd64.tar.gz

docker load< k8s-dns-kube-dns-amd64.tar.gz

docker load< k8s-dns-sidecar-amd64.tar.gz

docker load<kube-apiserver-amd64.tar.gz

docker load<kube-controller-manager-amd64.tar.gz

docker load<kube-proxy-amd64.tar.gz

docker load<kube-scheduler-amd64.tar.gz

docker load<pause-amd64.tar.gz


查看导入的镜像:

1

2

3

4

5

6

[root@iZbp15th6fsxatrsfbay9iZ images]# docker images

REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE

gcr.io/google_containers/kube-proxy-amd64                v1.9.0              f6f363e6e98e        3 days ago          109 MB

gcr.io/google_containers/kube-apiserver-amd64            v1.9.0              7bff5aa286d7        3 days ago          210 MB

gcr.io/google_containers/kube-controller-manager-amd64   v1.9.0              3bb172f9452c        3 days ago          138 MB

gcr.io/google_containers/kube-scheduler-amd64            v1.9.0              5ceb21996307        3 days ago          62.7 MB

2.4.2 node

1

2

3

mkdir -p /opt/node

cd /opt/node

tar zxvf k8s1.9.0-images-node.tar.gz

导入镜像:

1

2

3

4

5

6

7

8

9

cd images

docker load<busyboxplus.tar.gz

docker load<flannel.tar.gz

docker load<heapster-amd64.tar.gz

docker load<heapster-grafana-amd64.tar.gz

docker load<heapster-influxdb-amd64.tar.gz

docker load<kube-proxy-amd64.tar.gz

docker load<kubernetes-dashboard-amd64.tar.gz

docker load<pause-amd64.tar.gz

查看导入镜像:

1

2

3

4

5

6

7

8

9

10

11

12

[root@iZbp1ea5ui64fv6qohw86wZ images]# docker images

REPOSITORY                                                                       TAG                 IMAGE ID            CREATED             SIZE

gcr.io/google_containers/kube-proxy-amd64                                        v1.9.0              f6f363e6e98e        3 days ago          109 MB

gcr.io/google_containers/kubernetes-dashboard-amd64                              v1.8.1              e94d2f21bc0c        3 days ago          121 MB

quay.io/coreos/flannel                                                           v0.9.1-amd64        2b736d06ca4c        4 weeks ago         51.3 MB

gcr.io/google_containers/heapster-influxdb-amd64                                 v1.3.3              577260d221db        3 months ago        12.5 MB

gcr.io/google_containers/heapster-grafana-amd64                                  v4.4.3              8cb3de219af7        3 months ago        152 MB

gcr.io/google_containers/heapster-amd64                                          v1.4.2              d4e02f5922ca        3 months ago        73.4 MB

registry.cn-hangzhou.aliyuncs.com/sunyuki/pod-infrastructure                     latest              f66f4bd9b894        6 months ago        206 MB

registry.cn-hangzhou.aliyuncs.com/google-containers/kubernetes-dashboard-amd64   v1.5.0              e5133bac8024        12 months ago       88.9 MB

gcr.io/google_containers/pause-amd64                                             3.0                 99e59f495ffa        19 months ago       747 kB

radial/busyboxplus                                                               curl                71fa7369f437        3 years ago         4.21 MB

2.5 Master节点初始化集群

1

2

3

4

5

6

cat <<EOF>/etc/sysctl.d/k8s.conf

net.ipv4.ip_forward=1

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

sysctl -p /etc/sysctl.d/k8s.conf

使用kubeadm初始化集群,在Master上执行下面的命令:

1

2

3

4

kubeadm init \

--kubernetes-version=v1.9.0 \

--pod-network-cidr=10.244.0.0/16 \

--apiserver-advertise-address=172.16.2.55

初始化信息:

1

2

3

4

5

6

7

8

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/

You can now join any number of machines by running the following on each node

as root:

  kubeadm join --token 7bc0ec.6dddfaf4372f196a 172.16.2.55:6443 --discovery-token-ca-cert-has

按照提示使用集群:

1

2

3

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看集群状态:

1

2

3

4

5

[root@iZbp15th6fsxatrsfbay9iZ images]# kubectl get cs

NAME                 STATUS    MESSAGE              ERROR

scheduler            Healthy   ok                  

controller-manager   Healthy   ok                  

etcd-0               Healthy   {"health""true"}

2.5.1 重置k8sadm

若之前的初始化没成功,需要重置,再重新初始化:
重置:

1

2

3

4

5

6

kubeadm reset

ifconfig cni0 down

ip link delete cni0

ifconfig flannel.1 down

ip link delete flannel.1

rm -rf /var/lib/cni/

然后重新初始化

2.6 安装flannel

master节点上传并解压yaml包:

1

2

3

4

5

mkdir /opt/yaml

cd /opt/yaml

tar zxvf k8s1.9.0.yaml.tar.gz

cd yaml

kubectl apply -f  kube-flannel.yml

使用kubectl get pod --all-namespaces -o wide确保所有的Pod都处于Running状态:

1

kubectl get pod --all-namespaces -o wide


集群在线部署篇

2.7 添加节点

所有Node节点执行:

1

2

3

4

5

6

7

cat <<EOF>/etc/sysctl.d/k8s.conf

net.ipv4.ip_forward=1

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

sysctl -p /etc/sysctl.d/k8s.conf

kubeadm join --token 7bc0ec.6dddfaf4372f196a 172.16.2.55:6443 --discovery-token-ca-cert-hash sha256:8cc82d2293559436be8ef16bdfb761c0bbde1730fdfaf350c4ccddc607f6659

【问题】若出现以下现象:

1

2

3

4

5

[WARNING FileExisting-crictl]: crictl not found in system path

[preflight] Starting the kubelet service

[discovery] Trying to connect to API Server "172.16.2.55:6443"

[discovery] Created cluster-info discovery client, requesting info from "https://172.16.2.55:6443"

[discovery] Failed to connect to API Server "172.16.2.55:6443": there is no JWS signed token in the cluster-info ConfigMap. This token id "ea149b" is invalid for this cluster, can't connect

【解决】在master节点重新生成一个

1

kubeadm token create --print-join-command

master节点执行:

1

kubectl get nodes

2.7.1 移除并重新添加节点

若想移除节点(前提:该节点没有重要的服务)或者节点配置有问题想重新配置,则执行以下命令。
master节点:

1

kubectl delete node k8s-node-01

k8s-node-01:

1

2

3

4

5

6

kubeadm reset

ifconfig cni0 down

ip link delete cni0

ifconfig flannel.1 down

ip link delete flannel.1

rm -rf /var/lib/cni/

2.8 测试DNS

master节点:

1

kubectl run curl --image=radial/busyboxplus:curl -i --tty

1

2

3

4

5

6

7

8

9

10

[root@k8s-master yaml]# kubectl run curl --image=radial/busyboxplus:curl -i --tty

If you don't see a command prompt, try pressing enter.

[ root@curl-545bbf5f9c-sf2vh:/ ]$ nslookup kubernetes.default

Server:    10.96.0.10

Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default

Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local

[ root@curl-545bbf5f9c-sf2vh:/ ]$ exit

Session ended, resume using 'kubectl attach curl-545bbf5f9c-sf2vh -c curl -i -t' command when the pod is running

若出现DNS解析不了的情况:

1

nslookup: can't resolve 'kubernetes.default'

【解决】

1

2

echo 'nameserver 10.96.0.10'>>/etc/resolv.conf

kubectl -n kube-system delete pod kube-dns-xx

2.9 dashboard插件部署

kubernetes-dashboard.yaml文件中的ServiceAccount kubernetes-dashboard只有相对较小的权限,因此我们创建一个kubernetes-dashboard-admin的ServiceAccount并授予集群admin的权限。
master节点:

1

2

kubectl create -f kubernetes-dashboard.yaml

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

查看kubernete-dashboard-admin的token:

1

2

[root@k8s-master yaml]#kubectl -n kube-system get secret | grep kubernetes-dashboard-admin

kubernetes-dashboard-admin-token-82vb6           kubernetes.io/service-account-token   3         13m

返回的结果如下,token信息用于登录dashboard:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[root@k8s-master yaml]#kubectl describe -n kube-system secret/kubernetes-dashboard-admin-token-82vb6

Name:         kubernetes-dashboard-admin-token-82vb6

Namespace:    kube-system

Labels:       <none>

Annotations:  kubernetes.io/service-account.name=kubernetes-dashboard-admin

              kubernetes.io/service-account.uid=236fa217-f413-11e7-9297-00163e0ed454

Type:  kubernetes.io/service-account-token

Data

====

ca.crt:     1025 bytes

namespace:  11 bytes

token:      eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbi10b2tlbi04MnZiNiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjIzNmZhMjE3LWY0MTMtMTFlNy05Mjk3LTAwMTYzZTBlZDQ1NCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiJ9.Vfjwnl060xdjd06y-QUoE1z5WTH1ndXrLoqD0bhwqJqn4WCmqgnmzCUAi1rzTTuNlWW6afr3T8EjhuBlATGNfV-4NvQXRNr7JYrMKjW5Em5Fl1jTHnTzXK61CKos23leHJ4yFoHu4MXoGcQY4JSuqz5NvPD4ymj_Ug8c5VStTfCdfn88zLvNxY-nIoCsxVZTAipXP6EiB_j9kJBb03JwgoZxtC_ZqIphbXSKWhlL5V6epZ2G5-lh_nPEpFueaimDK-r3yAdJ2uo-BQhkRnH6zb3Tvdy03nYgR9msW9IMM4q-vxZ3ok8sbcZXuuUW9InCexnttenZe90fL6PMPHUTww


2.10 安装heapster插件

安装Heapster为集群添加使用统计和监控功能,为Dashboard添加仪表盘。
master节点执行:

1

2

cd heapster/

kubectl create -f ./

查看pod状态:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[root@k8s-master heapster]# kubectl get pods --all-namespaces -o wide

NAMESPACE     NAME                                    READY     STATUS    RESTARTS   AGE       IP            NODE

default       curl-545bbf5f9c-sf2vh                   1/1       Running   1          4m        10.244.1.24   k8s-node-01

kube-system   etcd-k8s-master                         1/1       Running   0          11m       172.16.2.55   k8s-master

kube-system   heapster-dfd674df9-pnhfn                1/1       Running   0          16s       10.244.1.28   k8s-node-01

kube-system   kube-apiserver-k8s-master               1/1       Running   0          11m       172.16.2.55   k8s-master

kube-system   kube-controller-manager-k8s-master      1/1       Running   0          11m       172.16.2.55   k8s-master

kube-system   kube-dns-6f4fd4bdf-f2ssn                3/3       Running   0          12m       10.244.0.5    k8s-master

kube-system   kube-flannel-ds-k4pnm                   1/1       Running   0          10m       172.16.2.55   k8s-master

kube-system   kube-flannel-ds-t2jmp                   1/1       Running   0          6m        172.16.2.79   k8s-node-01

kube-system   kube-proxy-9dzwl                        1/1       Running   0          6m        172.16.2.79   k8s-node-01

kube-system   kube-proxy-hv96h                        1/1       Running   0          12m       172.16.2.55   k8s-master

kube-system   kube-scheduler-k8s-master               1/1       Running   0          11m       172.16.2.55   k8s-master

kube-system   kubernetes-dashboard-7b7b5cd79b-4brdm   1/1       Running   0          2m        10.244.1.25   k8s-node-01

kube-system   monitoring-grafana-76848b566c-6vs8x     1/1       Running   0          17s       10.244.1.26   k8s-node-01

kube-system   monitoring-influxdb-6c4b84d695-k4xsh    1/1       Running   0          17s       10.244.1.27   k8s-node-01

2.11 使用nodeport方式访问

把type: ClusterIP 改成 type: NodePort ,加入nodePort: 30010,然后保存:

1

2

kubectl -n kube-system edit service kubernetes-dashboard

kubectl -n kube-system get service kubernetes-dashboard

2.12 打开dashboard

火狐浏览器输入https://192.168.110.76:30010
选择令牌,将之前token信息复制进去,然后登陆.
 

2.13 添加ssl证书

若需要使用域名访问dashboard,则必须修改ssl证书。
在master节点创建cert目录:

1

mkdir -p /alidata/application-data/cert/

1

2

3

kubectl delete -f kubernetes-dashboard.yaml

kubectl create secret generic kubernetes-dashboard-certs --from-file=/alidata/application-data/cert/ -n kube-system

kubectl apply -f kubernetes-dashboard.yaml

还需要重新修改node方式访问。将ssl证书上传到该目录。

执行以下命令:

成功后,就可以通过https://k8s.ibuscloud.com:30010访问了。

3、k8s使用ipvs

3.1 确认ipvs模块

各节点执行以下命令:

1

2

lsmod |grep ip_vs

yum -y install ipvsadm

3.2 安装kube-router

master节点执行以下命令:

1

2

3

4

kubectl apply -f kubeadm-kuberouter-all-features.yaml

kubectl get po --all-namespaces

kubectl delete ds kube-proxy -n kube-system

docker run --privileged --net=host gcr.io/google_containers/kube-proxy-amd64:v1.9.0 kube-proxy --cleanup-iptables

3.3 验证ipvs

在master节点上执行以下命令:

1

2

3

kubectl run myip --image=cloudnativelabs/whats-my-ip --replicas=2 --port=8080

kubectl expose deployment myip --port=8080 --target-port=8080 --type=NodePort

kubectl get svc


 

4、docker仓库harbor

4.1 前置条件

需要安装docker,并修改docker启动项和配置文件,允许访问harbor。
安装docker-compose:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

[root@k8s-master yaml]#curl k8s-node-02:30179

HOSTNAME:myip-859c596bbf-7zmkh IP:10.244.1.4

[root@k8s-master yaml]#curl k8s-node-02:30179

^C

[root@k8s-master yaml]#curl k8s-node-02:30179

HOSTNAME:myip-859c596bbf-7zmkh IP:10.244.1.4

[root@k8s-master yaml]#curl k8s-node-02:30179

^C

[root@k8s-master yaml]#curl k8s-node-02:30179

HOSTNAME:myip-859c596bbf-7zmkh IP:10.244.1.4

[root@k8s-master yaml]#curl k8s-node-02:30179

^C

[root@k8s-master yaml]#curl k8s-master:30179

^C

[root@k8s-master yaml]#curl k8s-master:30179

【解决】
重启网络,执行以下命令:

1

2

3

4

kubectl delete -f kubeadm-kuberouter-all-features.yaml

kubectl delete -f kube-flannel.yml

kubectl apply -f kubeadm-kuberouter-all-features.yaml

kubectl apply -f kube-flannel.yml

注意:先起kube-router,再起kube-flannel,否则无效。若重启一遍还存在问题,那么多重启几遍。

4.2 安装

将harbor安装在master节点,安装步骤:

1

2

3

4

5

6

mkdir /alidata/harbor

cd /alidata/harbor

wget https://github.com/vmware/harbor/releases/download/v1.2.2/harbor-offline-installer-v1.2.2.tgz

tar zxvf harbor-offline-installer-v1.2.2.tgz

cd harbor

./install.


4.3 登录仓库web

输入地址:http://192.168.110.75/harbor
用户名:admin
初始密码:harbor目录下的harbor.cfg文件中配置的密码
登录后:

4.4 拉取和推送

任一节点,登录docker仓库:

1

docker login 172.16.2.55

如果出现类似以下问题:

1

Get https://172.16.2.55/v1/_ping: dial tcp 172.16.2.55:443: getsockopt: connection refused

【解决】
按照这个步骤配置。
测试拉取和推送
在node-01推送一个镜像:

1

2

docker tag centos:latest 172.16.2.55/library/centos:1.0

docker push 172.16.2.55/library/centos:1.0

在node-02拉取一个镜像:

1

docker pull 172.16.2.55/library/centos:1.0


4.5 添加https访问

修改harbor.cfg文件:

1

2

3

4

hostname = k8s.ibuscloud.com

ui_url_protocol = https

ssl_cert = /alidata/application-data/cert/dashboard.crt

ssl_cert_key = /alidata/application-data/cert/dashboard.key

执行以下命令:

1

2

3

4

cd /alidata/harbor

./prepare

docker-compose down

docker-compose up -d


【验证】 https://k8s.ibuscloud.com/harbor/

5、jenkins

5.1 启动jenkins

由于之前已经对jenkins做了配置,安装好了插件和f6环境,当前只需要启动jenkins即可。
jenkins容器指定了运行的宿主机(k8s-node-01),且挂载了本地目录,用于数据持久化。
创建新的namespace,命名为jenkins,再创建service,最后创建deploymet,执行以下命令:

1

2

3

kubectl create namespace jenkins

kubectl create -f /alidata/yaml/jenkins/jenkins-service.yaml

kubectl create -f /alidata/yaml/jenkins/jenkins-rc.yaml

注:jenkins-service.yaml和jenkins-rc.yaml指定了namespace为jenkins。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值