Centos 7部署k8s集群(极简版)

安装环境:

由于是实验环境,所以关闭selinux和firewalld。
k8s-master    192.168.131.128    centos 7.7
k8s-node1     192.168.131.133    centos 7.7

1, 安装docker,不要追求最新,直接yum安装就好(所有节点)

yum install docker -y      //* 默认ce社区版本
//* 修改启动docker systemd文件,加入一条启动docker前先开启iptables转发功能
sed -ri '/ExecStart/i\ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT' /usr/lib/systemd/system/docker.service
systemctl daemon-reload    //* 修改systemd文件后需要刷新
systemctl start docker     //* 启动docker
systemctl enable docker    //* 将docker加入开机自启

2, 修改hosts配置文件,达到通过主机名访问的目的(所有节点一致)

192.168.131.128 k8s-master
192.168.131.128 etcd
192.168.131.128 registry
192.168.131.133 k8s-node1

3, 配置k8s软件源,由于有道边境墙,所以我们使用阿里云作为源(所有节点)

cat > /etc/yum.repos.d/kube.repo <<-EOF
[kubernetes]
name=Kubernetes repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
        https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF

4, 配置k8s-master主节点

//* 安装主节点必备控制器
yum install kubeadm kubectl kubelet -y
//* 初始化主节点
kubeadm init --kubernetes-version="1.17.1" --pod-network-cidr="10.244.0.0/16"

Snipaste_2020-01-22_18-21-02.png

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

网络插件下载地址:https://github.com/coreos/flannel
打开页面后向下滑动页面,找到以下位置,会有手动部署命令
Snipaste_2020-01-22_18-28-23.png

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
[[email protected] ~]# kubectl get nodes
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   5m18s   v1.17.1

5, 配置k8s-node1从节点(所有从节点)

yum install kubeadm kubectl kubelet -y

Snipaste_2020-01-22_18-39-22.png

kubeadm join 192.168.131.128:6443 --token ky7qtu.h9kfvduz2inkyx6e --discovery-token-ca-cert-hash sha256:82c37ab9de373c20d80e7cc30a93c3af3f051f296de8f9a2b47d81143acb61f7

6, 验证是否加入成功,主节点执行(如果需要node节点也可以执行kubectl,只需要将主节点的config文件放到node节点家目录下的.kube目录下即可)

[[email protected] ~]# kubectl get nodes    //* 已经可以查看到node1节点了,但是状态是NotReady,因为node1节点的网络插件还没准备好,过一会儿再看一下
NAME         STATUS     ROLES    AGE     VERSION
k8s-master   Ready      master   9m37s   v1.17.1
k8s-node1    NotReady   <none>   9s      v1.17.1
[[email protected] ~]# kubectl get nodes    //* 现在可以看到状态已经为Ready了
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   9m45s   v1.17.1
k8s-node1    Ready    <none>   17s     v1.17.1

7, 简单测试(k8s-master节点执行)

kubectl create deploy ngx-dep --image=nginx:1.14-alpine  //* 通过k8s-master在node节点上创建一个pod
kubectl get svc  //* 找出ngx-dep的内部IP来访问
[[email protected] ~]# curl -s 10.244.1.3

Snipaste_2020-01-22_19-17-30.png
我手动删除一个pod之后,k8s又自动帮我创建了一个一样的pod
Snipaste_2020-01-22_19-19-02.png
可是新建的pod Ip已经变了,那么如何来通过一个接口来同一访问后端pod呢?

kubectl create service clusterip ngx-dep --tcp=80:80    //* 创建一个集群ip服务,将所有80端口的流量都转发到ngx-dep pod的80端口上,这样就不需要知道pod到底是什么ip了
[[email protected] ~]# kubectl get svc    //* 查看cluster_ip
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   3h28m
ngx-dep      ClusterIP   10.106.128.202   <none>        80/TCP    4s

我们来访问一下ngx-dep的cluster-ip试试
Snipaste_2020-01-22_19-47-55.png
可以看到不管后端pod_ip变成什么,我们都不用担心了,直接通过k8s给的ip进行访问即可,但是如果有多个master节点呢?通过ip的方式访问就显得很不灵活了

[[email protected] ~]# kubectl get svc -n kube-system    //* 查出coreDNS服务器的ip地址
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   3h36m
cat > /etc/resolv.conf <<-EOF
nameserver 10.96.0.10
EOF
curl ngx-dep.default.svc.cluster.local.
ngx-dep           //* service服务名
default           //* service服务默认命名空间
svc               //* 固定写法
cluster.local.    //* 初始化时指定的dns域名,默认为cluster.local.

Snipaste_2020-01-22_19-54-53.png

9, 通过反代服务器指定到上面的域名就可以了

[[email protected] ~]# cat /etc/nginx/conf.d/k8s.conf 
    server {
      listen 8011;
      server_name _;

    location / {
      proxy_pass http://ngx-dep.default.svc.cluster.local.;
    }
}

Snipaste_2020-01-22_20-04-57.png