华为云上k8s部署文档

一、简介:

Kubernetes是一个可移植的,可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声

明式配置和自动化。它拥有一个庞大且快速增长的生态系统。Kubernetes的服务,支持和工具广

泛可用。

Kubernetes这个名字起源于希腊语,意思是舵手或飞行员。Google在2014年开源了

Kubernetes项目。Kubernetes建立在Google大规模运行生产工作负载的十年半的经验的基础

上,并结合了社区中最好的想法和实践

官网链接:https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/

怎么使用:

-**Build , Ship and Run (创建,发送和运行)

-**Build once,Run anywhere (搭建一次,到处能用)

-Docker技术的核心概念:

1.镜像(Image)

2.容器(Container)

3.仓库(Repository)

kubernetes的架构

一个k8s系统,通常称为一个k8s集群(cluster)

这个集群主要包括两个部分:

一个是master节点(主节点)

Master节点包括API Server、Scheduler、Controller manager、etcd。

API Server是整个系统的对外接口,提供客户端和其它组件调用,相当于“营业厅”。

Scheduler 负责对集群内部的资源进行调度,相当于“调度室”。

Controller manager负责管理控制器,相当于“大总管”。

一群Node节点(计算节点)

-Node节点包括**Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod。

Pod是kubernetes最基本的操作单元。

一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。

除了Pod之外,k8s还有一个Service,一个Service可以看作一组提供相同服务的Pod的对外访问接口

Docker:不用说了,创建容器的。

Kubelet:主要负责监视指派到它在Node上的Pod,包括创建、修改、监控、删除等。

Kuber-proxy,主要负责为Pod对象对象提供代理。

Fluentd,主要负责日志收集、存储与查询。

#############################################################################

二、环境介绍:

华为云:master节点 IP地址:192.168.0.20

nova1 192.168.0.21nova2 192.168.0.22

registry[私有仓库] 192.168.0.23

三、kubernetes的配置:

1.设置ip和主机名

/etc/hosts //如果你内外又属于自己的dns那就不需要做这一步

2.开启路由转发功能

net.ipv4.ip_forward=1

3.配置yum源

这里使用的是华为云提供的yum源

4.配置私有仓库registry [注:私有镜像仓库也可以在master管理节点上配置]

[root@registry ~]# yum -y install docker-distribution.x86_64 //直接使用华为云提供的docker仓库包

[root@registry ~]# yum -y install docker

注意:由于使用的是华为云上的docker仓库,由于版本不一致导致/etc/sysconfig/docker/里面少了私有仓库

的选项我们需要手动加进去–add-registry=”192.168.0.23:5000″ —

insecure-registry=”192.168.0.23:5000″

[root@registry docker]# vim /etc/sysconfig/docker

4 OPTIONS=’–selinux-enabled –log-driver=journald –signature-verification=false –add-regis

try=”192.168.0.23:5000″ –insecure-registry=”192.168.0.23:5000″ ‘

启动服务

[root@registry ~]# systemctl start docker-distribution

[root@registry ~]# systemctl enable docker-distribution

[root@registry ~]# systemctl start docker

[root@registry ~]# systemctl enable docker

打标记把需要的镜像上传仓库:

[root@registry docker]# docker tag docker.io/centos:latest 192.168.0.23:5000/docker.io/centos:latest

[root@registry docker]# docker push 192.168.0.23:5000/docker.io/centos:latest

[root@registry docker]# docker tag kubernetes-dashboard-amd64:v1.8.3

192.168.0.23:5000/kubernetes-dashboard-amd64:v1.8.3

[root@registry docker]# docker push 192.168.0.23:5000/kubernetes-dashboard-amd64:v1.8.3

[root@registry docker]# docker tag pod-infrastructure:latest 192.168.0.23:5000/pod-

infrastructure:latest

[root@registry docker]# docker push 192.168.0.23:5000/pod-infrastructure:latest

镜像上传私有仓库完后可以验证一下:

curl http://192.168.0.23:5000/v2/_catalog

{“repositories”:[“docker.io/centos”,”kubernetes-dashboard-amd64″,”pod-infrastructure”]} //能看到

上传的包就代表成功了然后分别在:manster、nova1、nova2等机器上操作

[root@ecs-master ~]# yum -y install docker

[root@ecs-master ~]# scp root@192.168.0.23:/etc/sysconfig/docker /etc/sysconfig/docker

[root@ecs-master ~]# curl http://192.168.0.23:5000/v2/_catalog

{“repositories”:[“docker.io/centos”,”kubernetes-dashboard-amd64″,”pod-infrastructure”]}

5、配置kubernets –master上操作

5.1需要这六个软件包:

[root@ecs-master kubernetes]# ls

containernetworking-cni-0.6.0-3.el7.x86_64.rpm kubernetes-kubeadm-1.10.3-0.el7.x86_64.rpm

etcd-3.3.11-2.el7.centos.x86_64.rpm kubernetes-master-1.10.3-0.el7.x86_64.rpm

flannel-0.7.1-4.el7.x86_64.rpm kubernetes-node-1.10.3-0.el7.x86_64.rpm

kubernetes-1.10.3-0.el7.x86_64.rpm repodata

kubernetes-client-1.10.3-0.el7.x86_64.rpm

5.2自己共享yum源:

[root@ecs-master kubernetes]# createrepo .

5.3分别在三台机器都配置yum源

5.4在master上安装以下的包

package:

1、etcd

2、kubernetes-master

3、kubernetes-client

[root@ecs-master kubernetes]# yum -y install kubernetes-master etcd kubernetes-client

5.5需要启动的服务

service:

1、kube-apiserver

2、kube-controller-manager

3、kube-scheduler

4、etcd //是一款nosql数据库

需要修改的配置文件:

第一个文件是etcd服务的配置文件:[root@ecs-master kubernetes]# vim /etc/etcd/etcd.conf

6 ETCD_LISTEN_CLIENT_URLS=”http://192.168.0.20:2379″ //etcd服务监听的地址(etcd需要监听

mastar的地址)

第二个文件是kubeconfig的配置文件:[root@ecs-master kubernetes]# vim /etc/kubernetes/config

22 KUBE_MASTER=”–master=http://192.168.0.20:8080″ //配置kuber-master的ip地址

第三个文件:[root@ecs-master kubernetes]# vim /etc/kubernetes/apiserver

8 KUBE_API_ADDRESS=”–insecure-bind-address=0.0.0.0″ //监听访问的地址

17 KUBE_ETCD_SERVERS=”–etcd-servers=http://127.0.0.1:2379,http://192.168.0.20:2379″ //监听etcd

所在的IP地址

23 删除ServiceAccount 参数 //这个是证书的认证参数

第四个文件:/etc/kubernetes/controller-manager

第五个文件:/etc/kubernetes/scheduler启动服务:[root@ecs-master kubernetes]# systemctl restart kube-apiserver kube-controller-manager

kube-scheduler etcd

验证:

kubectl get cs //kubectl主要是控制k8s的命令,验证服务的状态

kubectl get csr

kubectl get node

[root@ecs-master kubernetes]# kubectl get cs

NAME STATUS MESSAGE ERROR

etcd-0 Unhealthy Get http://127.0.0.1:2379/health: dial tcp 127.0.0.1:2379: getsockopt:

connection refused

etcd-1 Unhealthy Get http://192.168.0.20:4001/health: dial tcp 192.168.0.20:4001:

getsockopt: connection refused

scheduler Healthy ok

controller-manager Healthy ok

6.配置nova节点(所有nova节点都需要配置)

需要的安装包:

1、kubernetes-node

2、docker

[root@nova2 ~]# yum -y install kubernetes-node docker

需要启动的服务:

1、kubelet

2、kube-proxy

3、docker

需要配置的配置文件:

1、/etc/sysconfig/docker

4 添加参数 –add-registry=”192.168.0.23:5000″ –insecure-registry=”192.168.0.23:5000″

2、/etc/kubernetes/config

22 KUBE_MASTER=”–master=http://192.168.0.20:8080″

3、/etc/kubernetes/kubelet

5 KUBELET_ADDRESS=”–address=0.0.0.0″ //kubelet监听的地址,网络监听

11 KUBELET_HOSTNAME=”–hostname-override=nova2″ //本机主机名

14添加参数: KUBELET_ARGS=”–cgroup-driver=systemd –fail-swap-on=false —

kubeconfig=/etc/kubern etes/kubelet.kubeconfig –pod-infra-container-image=pod-

infrastructure:latest” //上传镜像的参数

/etc/kubernetes/kubelet.kubeconfig //yaml文件

apiVersion: v1

kind: Configclusters:

– cluster:

server: http://192.168.0.20:8080 //master主机的IP

name: local

contexts:

– context:

cluster: local

name: local

current-context: local

[root@nova2 ~]# systemctl start kubelet kube-proxy docker //启动服务

[root@nova2 ~]# systemctl status kubelet kube-proxy docker //检查三个服务必须启动

在master上验证:

[root@ecs-master ~]# kubectl get node

NAME STATUS ROLES AGE VERSION

nova1 Ready <none> 15h v1.10.3

nova2 Ready <none> 1m v1.10.3

7.配置网络

master:

[root@ecs-master docker]# vim /etc/etcd/etcd.conf //配置数据库监听地址

6 ETCD_LISTEN_CLIENT_URLS=”http://0.0.0.0:2379″ //改成让监听所有地址

[root@ecs-master docker]# systemctl restart etcd.service

[root@ecs-master docker]# etcdctl mk /atomic.io/network/config

‘{“Network”:”10.254.0.0/16″,”Backend”:{“Type”:”vxlan”}}’ //给数据库添加网络字段给nova机器分

网段 ,此命令只能执行一次

{“Network”:”10.254.0.0/16″,”Backend”:{“Type”:”vxlan”}}

[root@ecs-master docker]# etcdctl get /atomic.io/network/config //验证查看

{“Network”:”10.254.0.0/16″,”Backend”:{“Type”:”vxlan”}}

maste和nova主机:

package:flannel

[root@ecs-master docker]# yum -y install flannel

配置文件:/etc/sysconfig/flanneld

4 FLANNEL_ETCD_ENDPOINTS=”http://192.168.0.20:2379″

[root@ecs-master docker]# systemctl stop docker

[root@ecs-master docker]# systemctl start flanneld //注:这里需要注意的是启动flanneld前

docker需要关闭,必须先起flanneld再起docker

[root@ecs-master docker]# systemctl start docker验证:

[root@nova2 ~]# docker run -it 192.168.0.23:5000/docker.io/centos:latest //创建一个容器

必须要互相能ping通这个容器

8创建容器,测试

[root@ecs-master docker]# kubectl create -f baseos.yaml

deployment.extensions “test-os” created

[root@ecs-master docker]# kubectl get pod //查看已经启动的容器

NAME READY STATUS RESTARTS AGE

test-os-787b55d7cd-bfnk5 1/1 Running 0 1m

test-os-787b55d7cd-hzx4j 1/1 Running 0 1m

[root@ecs-master docker]# kubectl delete -f baseos.yaml //删除创建的容器

[root@ecs-master docker]# kubectl exec -it test-os-787b55d7cd-2rqwd — /bin/bash //进入创建的容

[root@ecs-master docker]# kubectl get pod -o wide //可以查看到容器的详细信息

NAME READY STATUS RESTARTS AGE IP NODE

test-os-787b55d7cd-2rqwd 1/1 Running 0 8m 10.254.86.2 nova1

test-os-787b55d7cd-lfjcj 1/1 Running 0 8m 10.254.51.2 nova

[root@ecs-master docker]# cat baseos.yaml //启动容器的yaml文件

apiVersion: extensions/v1beta1 #当前格式的版本

kind: Deployment #当前创建资源的类型, 当前类型是Deployment

metadata: #当前资源的元数据

name: test-os #当前资源的名字 是元数据必须的项

spec: #是当前Deployment的规格说明

replicas: 1 #指当前创建的副本数量 默认不填 默认值就为‘1’

template: #定义pod的模板

metadata: #当前pod的元数据

labels: #至少顶一个labels标签,可任意创建一个 key:value

app: test_os

spec: #当前pod的规格说明

containers: #容器

– name: centos #是容器的名字容器名字是必须填写的

image: 192.168.0.23:5000/docker.io/centos:latest #镜像 镜像的名字和版本

stdin: true

tty: true

########################################################################启动kube-dashboard

[root@ecs-master docker]# kubectl create -f kube-dashboard.yaml

[root@ecs-master docker]# kubectl -n kube-system get pod -o wide //查看启动的kube-

dashboard服务

NAME READY STATUS RESTARTS AGE IP NODE

kubernetes-dashboard-8658d8bdf8-gctjq 1/1 ImagePullBackOff 0 4m 10.254.51.3

nova2

[root@ecs-master docker]# cat kube-dashboard.yaml //启动一个web页面管理的文件

kind: Deployment

apiVersion: apps/v1beta2

metadata:

labels:

k8s-app: kubernetes-dashboard

name: kubernetes-dashboard

namespace: kube-system

spec:

replicas: 1

revisionHistoryLimit: 10

selector:

matchLabels:

k8s-app: kubernetes-dashboard

template:

metadata:

labels:

k8s-app: kubernetes-dashboard

spec:

containers:

– name: kubernetes-dashboard

image: 192.168.0.23:5000/kubernetes-dashboard-amd64:v1.8.3

ports:

– containerPort: 9090

protocol: TCP

args:

– –apiserver-host=http://192.168.0.20:8080 ###修改为Master的IP

volumeMounts:

– mountPath: /tmp

name: tmp-volume

livenessProbe:

httpGet:

path: /

port: 9090initialDelaySeconds: 30

timeoutSeconds: 30

volumes:

– name: tmp-volume

emptyDir: {}

serviceAccountName: kubernetes-dashboard

# Comment the following tolerations if Dashboard must not be deployed on master

tolerations:

– key: node-role.kubernetes.io/master

effect: NoSchedule

kind: Service

apiVersion: v1

metadata:

labels:

k8s-app: kubernetes-dashboard

name: kubernetes-dashboard

namespace: kube-system

spec:

type: NodePort

ports:

– port: 80

targetPort: 9090

nodePort: 30090

selector:

k8s-app: kubernetes-dashboard

在nova上验证:

[root@nova1 ~]# ss -nutlp | grep 30090

tcp LISTEN 0 1024 :::30090 ((“kube-proxy”,pid=9169,fd=6))

[root@nova2 ~]# ss -nutlp | grep 30090

tcp LISTEN 0 1024 :::30090 ((“kube-proxy”,pid=9169,fd=6))

由于需要从外网访问先给nova绑定一个公网IP地址,然后使用浏览器进行访问http//ip地址:30090到此为止kubernetes的部署已经完成。

想要了解怎么管理尽请期待。。。。。。。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇