简介
kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
部署centos7虚拟机
安装Vmware workstation player
下载centos7系统镜像
CentOS-7-x86_64-Minimal-1810.iso
安装centos7虚拟机系统
centos系统最小化安装即可, kubernetes一般是集群部署,建议部署3台及以上,本教程按照3台虚拟主机进行部署。
配置centos7虚拟机系统
1:更新系统,安装必要基础工具(三个虚拟机都需要设置)
yum update //更新系统
yum install -y vim net-tools //安装基础程序
systemctl stop firewalld.service //关闭防火墙
systemctl disable firewalld.service //禁止开机启动防火墙
2:分配虚拟机网络静态IP,(centos7配置静态IP,自行百度)
机器IP地址
master 10.10.3.104
node 110.10.3.76
node 210.10.3.109
3:配置三台虚拟机的host
[root@master ~]# cat /etc/hosts
10.10.3.104 master etcd node14
10.10.3.76 node1 node15
10.10.3.109 node2 node16
部署Kubernetes
Master节点配置
服务安装
yum -y install epel-release
yum install -y etcd kubernetes-master ntp flannel
时间校准
systemctl start ntpd;
systemctl enable ntpd
ntpdate ntp1.aliyun.com
hwclock -w
配置etcd服务器
1:修改配置
[root@master ~]# grep -v '^#' /etc/etcd/etcd.conf
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://10.10.3.104:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://10.10.3.104:2379"
[root@master ~]# etcdctl set /atomic.io/network/config '{"Network": "172.16.0.0/16"}'
{"Network": "172.16.0.0/16"}
2:启动etcd
systemctl start etcd
systemctl enable etcd
3:检查etcd状态
[root@master ~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://10.10.3.104:2379
cluster is healthy
4:检查etcd集群成员列表,这里只有一台
[root@master ~]# etcdctl member list
8e9e05c52164694d: name=default peerURLs=http://localhost:2380 clientURLs=http://10.10.3.104:2379 isLeader=true
配置kube-apiserver
[root@master ~]# grep -v '^#' /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://10.10.3.104:8080"
[root@master ~]# grep -v '^#' /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://10.10.3.104:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit"
KUBE_API_ARGS=""
配置kube-controller-manager
[root@master ~]# grep -v '^#' /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS=""
配置kube-scheduler
[root@master ~]# grep -v '^#' /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="--address=0.0.0.0"
启动Master服务
for i in kube-apiserver kube-controller-manager kube-scheduler;
do systemctl restart $i;
systemctl enable $i;
done
节点配置以node1示例(包括node1,node2)
配置node网络,本实例采用flannel方式来配置,如需其他方式,请参考Kubernetes官网。
[root@node ~]# grep -v '^#' /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://10.10.3.104:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
FLANNEL_OPTIONS=""
[root@node ~]# systemctl restart flanneld
在master节点查看验证网络信息:
[root@master ~]# etcdctl get /atomic.io/network/config
{ "Network": "172.16.0.0/16" }
[root@master ~]# etcdctl ls /atomic.io/network/subnets //这一步需要启动node节点的flannel服务才能看到效果
/atomic.io/network/subnets/172.16.69.0-24
/atomic.io/network/subnets/172.16.6.0-24
[root@master ~]# etcdctl get /atomic.io/network/subnets/172.16.6.0-24
{"PublicIP":"10.10.3.76"}
[root@master ~]# etcdctl get /atomic.io/network/subnets/172.16.69.0-24
{"PublicIP":"10.10.3.109"}
配置kube-proxy
[root@node ~]# grep -v '^#' /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://10.10.3.104:8080"
[root@node ~]# grep -v '^#' /etc/kubernetes/proxy
KUBE_PROXY_ARGS="--bind-address=0.0.0.0" //这里注意不要写错了,原文连接里面写错了,害我调试了好久
配置kubelet
[root@node ~]# grep -v '^#' /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=10.10.3.76" //不同的node节点配置不一样,这里以node1为例
KUBELET_API_SERVER="--api-servers=http://10.10.3.104:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS="--cluster-dns=192.168.90.231" //配置pod的DNS地址,也可以用8.8.8.8,如果不加该参数,pod启动后会报warning,详见后面备注
启动Node服务
for i in flanneld kube-proxy kubelet docker;
do systemctl restart $i;
systemctl enable $i;
systemctl status $i ;
done
集群测试(在master节点测试)
节点查看
[root@master ~]# kubectl get nodes
NAME STATUS AGE
10.10.3.76 Ready 18h
10.10.3.109 Ready 13h
进行服务测试(命令行方式)
1:建立pod(nginx服务)
kubectl run nginx --image=nginx --port=80 --replicas=2
2:查看pod服务状态
[root@master ]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-3449338310-h6l9d 1/1 Running 0 6m
nginx-3449338310-n4grl 1/1 Running 0 6m
[root@master ]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 2 2 2 2 13m
3:通过端口将应用连接到公网
[root@node14 log]# kubectl expose deployment nginx --port=80 --type=LoadBalancer
service "nginx" exposed
[root@node14 log]# kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 21h
nginx 10.254.160.227 <pending> 80:30255/TCP 7s
4:外网测试
[root@node ~]# curl http://10.10.3.104:80
Welcome to nginx!
[root@node ~]# curl http://10.10.3.76:30255
Welcome to nginx!
可能遇到的问题
问题1:创建成功但是kubectl get pods 没有结果,错误如下:
编辑
解决:编辑/etc/kubernetes/apiserver 去除 KUBE_ADMISSION_CONTROL中的SecurityContextDeny,ServiceAccount,并重启kube-apiserver.service服务
问题2:pod-infrastructure:latest镜像下载失败,错误如下:
编辑
解决:安装rhsm服务,如下:
yum install *rhsm* -y
问题3:登陆容器报错,如下图:
编辑
解决:10250是kubelet的端口,在Node上检查/etc/kubernetes/kubelet ,KUBELET_ADDRESS需要修改为node ip
问题4:创建pod出错,错误如下图:
编辑
解决:Node节点配置kubelet的时候加上"--cluster-dns=8.8.8.8", 见文章上面的node配置信息
centos7.4安装配置使用简介Kubernetes(k8s)