centos7 搭建 kubernetes1.16.7 集群 I


環境

三台 Centos 7 服務器:kube_1、kube_2、kube_3,配置:2核 4G

設置主機名稱(*不改的話,加入work節點時會出大錯,這個細節改了好久)

# 臨時修改
hostname XXX

# 永久修改 (建議)
hostnamectl set-hostname xxx

 

關閉、禁用防火牆:

1 systemctl stop firewalld
2 
3 systemctl disable firewalld

禁用SELINUX:

1 setenforce 0

禁用交換分區

1 swapoff -a 

修改 /etc/fstab 文件,將交換分區的文件系統注釋掉,如下

# /dev/mapper/centos-swap swap                    swap    defaults        0 0

 

創建 /etc/sysctl.d/k8s.conf 文件,添加如下內容:

1 net.bridge.bridge-nf-call-ip6tables = 1
2 net.bridge.bridge-nf-call-iptables = 1
3 net.ipv4.ip_forward = 1

執行如下命令使修改生效:

1 modprobe br_netfilter
2 
3 sysctl -p /etc/sysctl.d/k8s.conf

安裝Docker

 1 # step 1: 安裝必要的一些系統工具
 2 sudo yum install -y yum-utils device-mapper-persistent-data lvm2
 3 
 4 # Step 2: 添加軟件源信息
 5 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 6 
 7 # Step 3: 更新並安裝 Docker-CE
 8 sudo yum makecache fast
 9 sudo yum -y install docker-ce
10 
11 # Step 4: 開啟Docker服務
12 sudo service docker start
13 
14 # Step 5: 設置開機啟動
15 sudo systemctl enable docker

配置阿里雲鏡像加速器:

 1 mkdir -p /etc/docker
 2 
 3 tee /etc/docker/daemon.json <<-'EOF'
 4 {
 5   "registry-mirrors": ["https://obww7jh1.mirror.aliyuncs.com"]    # 上自己的阿里雲找自己的加速
 6 }
 7 EOF
 8 
 9 systemctl daemon-reload
10 
11 systemctl restart docker

安裝 kubelet kubeadm kubectl

 1 cat <<EOF > /etc/yum.repos.d/kubernetes.repo
 2 [kubernetes]
 3 name=Kubernetes
 4 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
 5 enabled=1
 6 gpgcheck=1
 7 repo_gpgcheck=1
 8 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
 9 EOF
10 
11 yum install -y kubelet-1.16.7 kubeadm-1.16.7 kubectl-1.16.7
12 
13 systemctl enable --now kubelet

構建 Kubernetes 集群

1、初始化 Master 節點 kube1

1 kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
  • --pod-network-cidr :后續安裝 flannel 的前提條件,且值為 10.244.0.0/16, 參考資料
  • --image-repository :指定鏡像倉庫,這個好像已經不行了,用我的倉庫   registry.cn-hangzhou.aliyuncs.com/wzllzw

輸出日志:

 1 [addons] Applied essential addon: CoreDNS
 2 
 3 Your Kubernetes control-plane has initialized successfully!
 4 
 5 To start using your cluster, you need to run the following as a regular user:
 6 
 7   mkdir -p $HOME/.kube
 8   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 9   sudo chown $(id -u):$(id -g) $HOME/.kube/config
10 
11 You should now deploy a pod network to the cluster.
12 Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
13   https://kubernetes.io/docs/concepts/cluster-administration/addons/
14 
15 Then you can join any number of worker nodes by running the following on each as root:
16 
17 kubeadm join 192.168.1.127:6443 --token yjscgl.eybl86olwr3g2ct9 \
18     --discovery-token-ca-cert-hash sha256:91f7982ff4ffb9099b5228449044483192b73d52932929674985ef595a769055 

從日志中,可以看出,要使用集群,需要執行如下命令:

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

 還需要部署一個 Pod Network 到集群中,此處選擇 flannel ,因為要訪問國外資源的緣故,這里另外處理

# 將 yml 文件下載到本地
[root@localhost ~]# wget https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
# 打開文件,將文件中所有 quay.io 修改為 quay-mirror.qiniu.com (https://blog.csdn.net/zsd498537806/article/details/85157560)

# 最后拉取鏡像
[root@localhost ~]# kubectl apply -f kube-flannel.yml

至此,Master 節點初始化完畢,查看集群相關信息:

# 查看集群
[root@localhost ~]# kubectl cluster-info
Kubernetes master is running at https://192.168.1.127:6443
KubeDNS is running at https://192.168.1.127:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

# 查看 node
[root@localhost ~]# kubectl get nodes
NAME         STATUS   ROLES    AGE    VERSION
k8s-master   Ready    master   106m   v1.16.7
k8s-node1    Ready    <none>   102m   v1.16.7
k8s-node2    Ready    <none>   33m    v1.16.4

# 查看pod
[root@localhost ~]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-58cc8c89f4-955zb             1/1     Running   0          106m
kube-system   coredns-58cc8c89f4-bp746             1/1     Running   0          106m
kube-system   etcd-k8s-master                      1/1     Running   0          106m
kube-system   kube-apiserver-k8s-master            1/1     Running   0          105m
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          105m
kube-system   kube-flannel-ds-amd64-ckdzv          1/1     Running   0          102m
kube-system   kube-flannel-ds-amd64-fvrmj          1/1     Running   0          105m
kube-system   kube-flannel-ds-amd64-m8557          1/1     Running   0          34m
kube-system   kube-proxy-6lgbv                     1/1     Running   0          34m
kube-system   kube-proxy-d8sxd                     1/1     Running   0          106m
kube-system   kube-proxy-v9xnz                     1/1     Running   0          102m
kube-system   kube-scheduler-k8s-master            1/1     Running   0          106m

* 如果初始化中遇到問題:

[root@localhost ~]# kubeadm reset

[root@localhost ~]# rm -rf /var/lib/cni/

[root@localhost ~]# rm -f $HOME/.kube/config

* 若出現 節點 NotReady,  coredns 為 pending (https://www.jianshu.com/p/d446121dbfc2

[root@localhost ~]# kubectl get nodes
NAME          STATUS     ROLES    AGE     VERSION
k8s-master   NotReady   master   2m48s   v1.16.7

# 查看 Pods 信息
[root@localhost ~]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                            READY   STATUS    RESTARTS   AGE
kube-system   coredns-9d85f5447-4f65b                         0/1     Pending   0          63m
kube-system   coredns-9d85f5447-b2m6m                         0/1     Pending   0          63m
kube-system   etcd-localhost.localdomain                      1/1     Running   0          63m
kube-system   kube-apiserver-localhost.localdomain            1/1     Running   0          63m
kube-system   kube-controller-manager-localhost.localdomain   1/1     Running   0          63m
kube-system   kube-proxy-sz9ld                                1/1     Running   0          63m
kube-system   kube-scheduler-localhost.localdomain            1/1     Running   0          63m

 解決方法:安裝CNI,安裝CNI配置文件

$ mkdir -p /etc/cni/net.d
$ cat >/etc/cni/net.d/10-mynet.conf <<EOF
{
    "cniVersion": "0.2.0",
    "name": "mynet",
    "type": "bridge",
    "bridge": "cni0",
    "isGateway": true,
    "ipMasq": true,
    "ipam": {
        "type": "host-local",
        "subnet": "10.22.0.0/16",
        "routes": [
            { "dst": "0.0.0.0/0" }
        ]
    }
}
EOF
$ cat >/etc/cni/net.d/99-loopback.conf <<EOF
{
    "cniVersion": "0.2.0",
    "name": "lo",
    "type": "loopback"
}
EOF

這里兩個配置一個是給容器塞一個網卡掛在網橋上的,另外一個配置負責擼(本地回環)

添加work節點

方式1 :使用 kubeadm init時返回的信息加入 (在work節點中輸入命令)

kubeadm join 192.168.1.127:6443 --token yjscgl.eybl86olwr3g2ct9 \
    --discovery-token-ca-cert-hash sha256:91f7982ff4ffb9099b5228449044483192b73d52932929674985ef595a769055 

方式2 :重新生成token

kubeadm token generate

kubeadm token create <generated-token> --print-join-command --ttl=24h

 

配置dns

 1 一、DNS的臨是修改。(重啟后失效)
 2 vim /etc/resolv.conf        //打開resolv.conf 文件
 3 
 4 改為如下內容:
 5 
 6 nameserver 8.8.8.8 #修改成你的主DNS
 7 
 8 nameserver 8.8.7.7 #修改成你的備用DNS
 9 
10  
11 
12 二、DNS永久修改。(永久修改不失效)
13 vim /etc/resolvconf/resolv.conf.d/base //打開resolv.conf 文件
14 
15 最后輸入:
16 
17 nameserver 8.8.8.8 #修改成你的主DNS
18 
19 nameserver 8.8.7.7 #修改成你的備用DNS

 

raw.githubusercontent.com的IP訪問呢不到(被污染)

1 # /etc/hosts 中加入 
2 199.232.68.133 raw.githubusercontent.com

 

參考:

kubernetes v1.16.x環境搭建 :https://www.jianshu.com/p/832bcd89bc07   

徹底理解kubernetes CNI :https://www.jianshu.com/p/d446121dbfc2 

 

gcr.io和quay.io拉取鏡像失敗 :https://blog.csdn.net/zsd498537806/article/details/85157560


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM