Centos7搭建kubernetes搭建
安装前的准备工作:
Kubernetes包提供了一些服务:kube-apiserver,kube-scheduler,kube-controller-manager,kubelet,kube-proxy。 这些服务由systemd管理,配置位于:/etc/kubernetes
。
Kubernetes master 将会跑这些服务:kube-apiserver, kube-controller-manager ,kube-scheduler和etcd。 kubernates工作节点跑的服务有:kubelet, proxy, cadvisor and docker。 所有节点都会起flanneld实现跨主机网络。
二.准备三台电脑
master:192.168.0.5
node1:192.168.0.6
node2:192.168.0.7
三.卸载系统自带docker
yum list installed | grep docker
yum remove -y docker.x86_64 docker-client.x86_64 docker-common.x86_64
四.关闭防火墙
systemctl disable iptables-services firewalld
systemctl stop iptables-services firewalld
五.安装配置Kubernetes
sh -x k8s-master.sh 192.168.0.5
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/usr/bin/env bash set -e MASTER_IP=$1 if [ ! $MASTER_IP ] then echo "MASTER_IP is null" exit 1 fi echo "=================install ntpd===================" yum -y install ntp systemctl start ntpd systemctl enable ntpd echo "=================install docker, k8s, etcd, flannel===================" cat <<EOF > /etc/yum.repos.d/virt7-docker-common-release.repo [virt7-docker-common-release] name=virt7-docker-common-release baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/ gpgcheck=0 EOF yum -y install --enablerepo=virt7-docker-common-release kubernetes etcd flannel echo "=================config kubernetes===================" mv /etc/kubernetes/config /etc/kubernetes/config.bak cat <<EOF >/etc/kubernetes/config # logging to stderr means we get it in the systemd journal KUBE_LOGTOSTDERR="--logtostderr=true" # journal message level, 0 is debug KUBE_LOG_LEVEL="--v=0" # Should this cluster be allowed to run privileged docker containers KUBE_ALLOW_PRIV="--allow-privileged=false" # How the replication controller and scheduler find the kube-apiserver KUBE_MASTER="--master=http://${MASTER_IP}:8080" EOF setenforce 0 #systemctl disable iptables-services firewalld #systemctl stop iptables-services firewalld echo "================= config etcd======================" sed -i s#'ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"'#'ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"'#g /etc/etcd/etcd.conf sed -i s#'ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"'#'ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"'#g /etc/etcd/etcd.conf echo "================= config apiserver===================" mv /etc/kubernetes/apiserver /etc/kubernetes/apiserver.bak cat <<EOF >/etc/kubernetes/apiserver # The address on the local server to listen to. KUBE_API_ADDRESS="--address=0.0.0.0" # The port on the local server to listen on. KUBE_API_PORT="--port=8080" # Port kubelets listen on KUBELET_PORT="--kubelet-port=10250" # Comma separated list of nodes in the etcd cluster KUBE_ETCD_SERVERS="--etcd-servers=http://${MASTER_IP}:2379" # Address range to use for services KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" # Add your own! KUBE_API_ARGS="" EOF echo "=================start and set etcd===============" systemctl start etcd etcdctl mkdir /kube-centos/network etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }" echo "=================config flannel===================" mv /etc/sysconfig/flanneld /etc/sysconfig/flanneld.bak cat <<EOF >/etc/sysconfig/flanneld # Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://${MASTER_IP}:2379" # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="/kube-centos/network" # Any additional options that you want to pass #FLANNEL_OPTIONS="" EOF echo "=================start etcd k8s ===================" for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler flanneld ; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done
六.安装node
sh install-k8s-node.sh 192.168.0.6 192.168.0.7 # master_ip node_ip
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#/usr/bin/env bash set -e MASTER_IP=$1 NODE_IP=$2 if [ ! $MASTER_IP ] || [ ! $NODE_IP ] then echo "MASTER_IP or NODE_IP is null" exit 1 fi echo '=================install ntpd===================' yum -y install ntp systemctl start ntpd systemctl enable ntpd echo "=================install docker, k8s, etcd, flannel===================" cat <<EOF > /etc/yum.repos.d/virt7-docker-common-release.repo [virt7-docker-common-release] name=virt7-docker-common-release baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/ gpgcheck=0 EOF yum -y install --enablerepo=virt7-docker-common-release kubernetes etcd flannel setenforce 0 echo "===============config kubernetes================" mv /etc/kubernetes/config /etc/kubernetes/config.bak cat <<EOF >/etc/kubernetes/config # logging to stderr means we get it in the systemd journal KUBE_LOGTOSTDERR="--logtostderr=true" # journal message level, 0 is debug KUBE_LOG_LEVEL="--v=0" # Should this cluster be allowed to run privileged docker containers KUBE_ALLOW_PRIV="--allow-privileged=false" # How the replication controller and scheduler find the kube-apiserver KUBE_MASTER="--master=http://${MASTER_IP}:8080" EOF echo "===============install docker, k8s, etcd, flannel================" cat <<EOF > /etc/yum.repos.d/virt7-docker-common-release.repo [virt7-docker-common-release] name=virt7-docker-common-release baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/ gpgcheck=0 EOF yum -y install --enablerepo=virt7-docker-common-release kubernetes etcd flannel echo "===============config kublet================" mv /etc/kubernetes/kubelet /etc/kubernetes/kubelet.bak cat <<EOF >/etc/kubernetes/kubelet # The address for the info server to serve on KUBELET_ADDRESS="--address=0.0.0.0" # The port for the info server to serve on KUBELET_PORT="--port=10250" # You may leave this blank to use the actual hostname # Check the node number! KUBELET_HOSTNAME="--hostname-override=${NODE_IP}" # Location of the api-server KUBELET_API_SERVER="--api-servers=http://${MASTER_IP}:8080" # Add your own! KUBELET_ARGS="" EOF echo "===============config flanneld================" mv /etc/sysconfig/flanneld /etc/sysconfig/flanneld.bak cat <<EOF >/etc/sysconfig/flanneld # Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://${MASTER_IP}:2379" # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="/kube-centos/network" # Any additional options that you want to pass #FLANNEL_OPTIONS="" EOF echo "==========start kube-proxy kubelet flanneld docker===========" for SERVICES in kube-proxy kubelet flanneld docker; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done echo "==============set kubectl================" kubectl config set-cluster default-cluster --server=http://${MASTER_IP}:8080 kubectl config set-context default-context --cluster=default-cluster --user=default-admin kubectl config use-context default-context
查看节点状态
$ kubectl get no
NAME STATUS AGE
NAME STATUS AGE
192.168.0.6 Ready 1h
192.168.0.7 Ready 2h
测试服务器
测试通过master部署两个nginx到node。
在master上新建文件nginx-deployment.yml
在master上新建文件nginx-deployment.yml
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 apiVersion: extensions/v1beta1 2 kind: Deployment 3 metadata: 4 name: nginx-deployment 5 spec: 6 replicas: 2 # tells deployment to run 2 pods matching the template 7 template: # create pods using pod definition in this template 8 metadata: 9 # unlike pod-nginx.yaml, the name is not included in the meta data as a unique name is 10 # generated from the deployment name 11 labels: 12 app: nginx 13 spec: 14 containers: 15 - name: nginx 16 image: nginx:1.7.9 17 ports: 18 - containerPort: 80
创建deployment
$ kubectl create -f nginx-deployment.yml
deployment "nginx-deployment" created
查看pod:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deployment-4087004473-kbbgs 1/1 Running 0 1h 192.168.0.6 192.168.0.7
nginx-deployment-4087004473-m47bg 1/1 Running 0 1h 192.168.0.6 192.168.0.7
# 访问nginx
$curl 192.168.6
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Welcome to nginx!</title> 5 <style> 6 body { 7 width: 35em; 8 margin: 0 auto; 9 font-family: Tahoma, Verdana, Arial, sans-serif; 10 } 11 </style> 12 </head> 13 <body> 14 <h1>Welcome to nginx!</h1> 15 <p>If you see this page, the nginx web server is successfully installed and 16 working. Further configuration is required.</p> 17 18 <p>For online documentation and support please refer to 19 <a href="http://nginx.org/">nginx.org</a>.<br/> 20 Commercial support is available at 21 <a href="http://nginx.com/">nginx.com</a>.</p> 22 23 <p><em>Thank you for using nginx.</em></p> 24 </body> 25 </html> 26 ---------------
如果发现STATUS
一直处于ContainerCreating
状态,可能是正在拉取镜像。可以查看详细信息.