kubernetes部署(k8s) 1.10版本
部署私有镜像仓库(服务端)
NFS—192.168.1.251(仓库)
[root@nfs ~]# yum -y install docker-distribution #下载软件包
启动私有仓库,并设置开机自启动
[root@nfs ~]# systemctl start docker-distribution.service
[root@nfs ~]# systemctl enable docker-distribution.service
仓库配置文件
——/etc/docker-distribution/registry/config.yml
——/var/lib/registry
nonde1—192.168.1.40(客户端)
修改配置文件
[root@node1 ~]# yum -y install docker
[root@node1 ~]# vim /etc/sysconfig/docker
...
INSECURE_REGISTRY='--insecure-registry 192.168.1.251:5000' #连接私有仓库不加密
ADD_REGISTRY='--add-registry 192.168.1.251:5000' #指定私有镜像仓库地址
....
:wq
---------------------------------------------------------
[root@node1 ~]# systemctl restart docker #重启服务
[root@node1 ~]# systemctl enable docker #设置开机自启
验证是否成功连接仓库
[root@node1 ~]# curl 192.168.1.251:5000/v2/_catalog #查看私有镜像仓库中的镜像名称和标签
[root@node1 ~]# curl 192.168.1.251:5000/v2/<repo>/tags/liast
#查看某一仓库的标签
私有仓库数据库的存储目录 ——/var/lib/registry
上传镜像到私有仓库
[root@node1 ~]# docker load -i /root/docker/pod-infrastructure.tar #使用tar包导入镜像
[root@node1 ~]# docker tag pod-infrastructure:latest 192.168.1.251:5000/pod-infrastructure:latest #上传镜像前需要先打标签
[root@node1 ~]# docker images #查看是否修改了标签
[root@node1 ~]# docker push 192.168.1.251:5000/pod-infrastructure:latest #上传镜像
[root@node1 ~]# curl 192.168.1.251:5000/v2/_catalog #查看是否上传成功
部署kubernettes-master
nfs-192.168.1.251
开启路由转发功能:两种方式
第一种:在内存开启
[root@nfs ~]# sysctl net.ipv4.ip_forward=1
----------------------------------------------------
第二种:修改配置文件
[root@nfs ~]# vim /etc/sysctl.conf
...
net.ipv4.ip_forward=1 #添加此行
:wq
配置 /etc/hosts 主机名和ip的对应关系
配置自定义yum仓库,把软件包放到自定义yum仓库里,因为有需要依赖包,配置yum仓库请看我之前发布的文章。https://blog.csdn.net/gms13410433461/article/details/103248047
yum安装软件包
[root@nfs ~]# yum -y install etcd.x86_64 kubernetes-master.x86_64 kubernetes-client.x86_64
修改配置文件:
[root@nfs ~]# vim /etc/etcd/etcd.conf
...
6 ETCD_LISTEN_CLIENT_URLS="http://192.168.1.251:2379"
...
:wq
-------------------------------------------------------
[root@nfs ~]# vim /etc/kubernetes/config
...
22 KUBE_MASTER="--master=http://192.168.1.251:8080"
....
:wq
------------------------------------------------------
[root@nfs ~]# vim /etc/kubernetes/apiserver
.....
8 KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
17 KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.251:2379"
23 KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,LimitRanger,SecurityContext Deny,ResourceQuota"
.......
:wq
启动服务:
设置开机自启动:
[root@nfs ~]# systemctl enable etcd.service
[root@nfs ~]# systemctl enable kube-apiserver.service
[root@nfs ~]# systemctl enable kube-controller-manager.service
[root@nfs ~]# systemctl enable kube-scheduler.service
启动服务:
[root@nfs ~]# systemctl start etcd.service kube-apiserver.service kube-controller-manager.service kube-scheduler.service
查看服务状态:
[root@nfs ~]# systemctl status etcd.service kube-apiserver.service kube-controller-manager.service kube-scheduler.service
查看服务状态全部都是:Active: active (running) 则正常启动
验证:
[root@nfs ~]# kubectl get cs #查看服务健康状态“ok”则正常,不是ok检查master节点
[root@nfs ~]# kubectl get csr #查看运行中的容器
[root@nfs ~]# kubectl get node #查看node节点
配置kubernets-minion(node节点)
node—192.168.1.40
[root@node1 ~]# yum -y install kubernetes-node.x86_64
修改配置文件:
[root@node1 ~]# vim /etc/kubernetes/config #全局配置文件
.....
22 KUBE_MASTER="--master=http://192.168.1.251:8080" #指向masterip地址
:wq
--------------------------------------------------------
[root@node1 ~]# vim /etc/kubernetes/kubelet
5 KUBELET_ADDRESS="--address=0.0.0.0"
14 KUBELET_ARGS="--cgroup-driver=systemd --fail-swap-on=false --kubeconfig=/etc/kubernetes/ku belet.kubeconfig --pod-infra-container-image=nfs:5000/pod-infrastructure:latest"
:wq
--------------------------------------------------------
[root@node1 ~]# vim /etc/kubernetes/kubelet.kubeconfig #本身没有此文件,需要自己创建
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://192.168.1.10:8080 ###Master的IP,即自身IP
name: local
contexts:
- context:
cluster: local
name: local
current-context: local
:wq
启动服务:
[root@node1 ~]# systemctl enable kubelet.service kube-proxy.service docker
[root@node1 ~]# systemctl start kubelet.service kube-proxy.service docker
[root@node1 ~]# systemctl status kubelet.service kube-proxy.service docker
查看服务状态全部都是:Active: active (running) 则正常启动
验证:
[root@nfs ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
node1 Ready <none> 18m v1.10.3
其他node节点同ndoe1一样 部署,以下部署node2-192.168.1.41 node3-192.168.1.42
一、node1、node2、node3分别下载rsync软件包,方便互相拷贝配置文件
[root@node1 ~]# yum -y install rsync ##需要互相拷贝的主机都按照rsync。否则会报错
[root@node2 ~]# yum -y install rsync
[root@node3 ~]# yum -y install rsync
二、node2、node3下载kubernetes-node.x86_64 docker
[root@node2 ~]# yum -y install kubernetes-node.x86_64 docker
[root@node3 ~]# yum -y install kubernetes-node.x86_64 docker
三、把node1上/etc/kubernetes/目录分别同步到node2、node3主机上
[root@node1 ~]# rsync -aXSH --delete /etc/kubernetes/ node2:/etc/kubernetes/
[root@node1 ~]# rsync -aXSH --delete /etc/kubernetes/ node3:/etc/kubernetes/
四、node2、node3节点上启动服务
[root@node2 ~]# systemctl enable kubelet.service kube-proxy.service docker
[root@node2 ~]# systemctl start kubelet.service kube-proxy.service docker
[root@node2 ~]# systemctl status kubelet.service kube-proxy.service docker
-----------------------------------------------------------------------------
[root@node3 ~]# systemctl enable kubelet.service kube-proxy.service docker
[root@node3 ~]# systemctl start kubelet.service kube-proxy.service docker
[root@node3 ~]# systemctl status kubelet.service kube-proxy.service docker
五、验证
[root@nfs ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
node1 Ready <none> 16h v1.10.3
node2 Ready <none> 7m v1.10.3
node3 Ready <none> 4m v1.10.3
#状态是Ready就是正常,NOtReady请查看etcd服务状态,如果是Runing,重启即可!
启动容器
配置网络,让不同网段的docker进行通信
master 配置 、安装软件:flannel
[root@nfs ~]# yum -y install flannel.x86_64
修改flannel配置文件
[root@nfs ~]# vim /etc/sysconfig/flanneld
4 FLANNEL_ETCD_ENDPOINTS="http://192.168.1.251:2379" 修改etcd安装的地址,即本机地址
:wq
----------------------------------------------------
[root@nfs ~]# vim /etc/etcd/etcd.conf
........
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
:wq
创建网络配置:
[root@nfs ~]# etcdctl mk /atomic.io/network/config '{"Network":"10.254.0.0/16", "Backend":{"Type":"vxlan"}}'
{"Network":"10.254.0.0/16", "Backend":{"Type":"vxlan"}}
#"/atomic.io/network" 这个在/etc/sysconfig/flanneld可以用找得到
#"10.254.0.0/16" 这个地址在/etc/kubernetes/apiserver 里面可以找的到
查看是否成功设置好:
[root@nfs ~]# etcdctl get /atomic.io/network/config
{"Network":"10.254.0.0/16", "Backend":{"Type":"vxlan"}}
启动服务:
[root@nfs ~]# systemctl enable flanneld.service
[root@nfs ~]# systemctl start flanneld.service
验证查看:
[root@nfs ~]# ifconfig
.....
flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 10.254.85.0 netmask 255.255.255.255 broadcast 0.0.0.0
.......
#ifconfig 后看到有flannel分配的网段就是设置成功了
node节点上配置网络,下载flannel软件安装
node1、node2、node3都需要配置
[root@node1 ~]# systemctl stop docker
[root@node2 ~]# systemctl stop docker
[root@node3 ~]# systemctl stop docker
#必须要先停docker ,因为docker本身网段是127.0.0.1是不可以对外通信的,
修改配置文件 :(node1、node2、node3都要做同样配置),这里仅设置node1作为范例
[root@node1 ~]# vim /etc/sysconfig/flanneld
.....
4 FLANNEL_ETCD_ENDPOINTS="http://192.168.1.251:2379"
.........
:wq
启动服务:(node1、node2、node3都要做同样配置),这里仅设置node1作为范例
[root@node1 ~]# systemctl start flanneld.service docker
#:注意,docker依赖于flannel这个软件才可以通信,所以启动的时候必须要先启动flannel在启动docker
验证:(node1、node2、node3都要做同样配置),这里仅设置node1作为范例
[root@node1 ~]# ifconfig docker
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.254.35.1 netmask 255.255.255.0 broadcast 0.0.0.0
#:如果查看还是172.17.0.1的话需要再次停掉docker,在启动就可以
运行一个容器的命令:
[root@nfs ~]# kubectl run haha -it --image=nfs:5000/docker.io/centos:latest
#"docker.io/centos:lates" 镜像名称和标签,
If you don't see a command prompt, try pressing enter.
[root@haha-c5d9b9dd8-8gpfd /]#
----------------------------------------------------------------
开启另外一个终端查看容器:
[root@nfs ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
centos-6b9c5fc774-45tqr 0/1 ImagePullBackOff 0 1h
haha-c5d9b9dd8-8gpfd 1/1 Running 1 15m
-----------------------------------------------------------------
如果需要知道在那一台node上启动的容器,可以在ndoe节点上docker ps -q查看
容器管理命令:
运行容器并进入:
[root@nfs ~]# kubectl run 容器名字 -it --image=nfs:5000/镜像名称+标签
查看运行的容器:
[root@nfs ~]# kubectl get pod
删除容器:
[root@nfs ~]# kubectl delete deployment 容器名称
查看创建容器的格式:
[root@nfs ~]# kubectl config view 容器名称
----------------------------------------------------------------------------
用yaml文件启动容器:
[root@nfs ~]# kubectl create -f K8s_start_file/baseos.yaml #文件名
[root@nfs ~]# kubectl get pod #查看运行的容器
[root@nfs ~]# kubectl exec 启动的容器名+ID -- /bin/bash #进入容器
一般开启服务是运行yaml文件:(以下是启动yaml的文件模板内容,仅提供参考)
baseos.yaml
[root@nfs ~]# vim K8s_start_file/baseos.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: centos:7.5.1804 #镜像 镜像的名字和版本
stdin: true
tty: true
----------------------------------------------------------------------------
kube-dashboard.yaml(模板) ——K8s管理界面 使用kubectl -n kube-system get启动服务
[root@nfs ~]# vim K8s_start_file/kube-dashboard.yaml
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.1.251:5000/kubernetes-dashboard-amd64:v1.8.3#镜像仓库的地址
ports:
- containerPort: 9090
protocol: TCP
args:
- --apiserver-host=http://192.168.1.251:8080 ###修改为Master的IP
volumeMounts:
- mountPath: /tmp
name: tmp-volume
livenessProbe:
httpGet:
path: /
port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30
volumes:
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
----------------------------------------------------------------------
使用kubectl -n kube-system get启动服务
[root@nfs ~]# kubectl create -f kube-dashboard.yaml #启动服务
[root@nfs ~]# kubectl -n kube-system get pod #查看服务
浏览器访问192.168.1.40:30090进去Kubenets控制面板

880

被折叠的 条评论
为什么被折叠?



