
k8s学习
K8S
资料参考
集群的条件
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止swap分区
Mac 本地安装虚拟机
- 配置: 2C4G 50G
- 修改网络配置:
1
2
3
4
5
6
7
8
9
10
11
12
13>cd /etc/sysconfig/network-scripts/
> vi ifcfg-eno-33
设置 :
ONBOOT=yes
> service network restart
> ping baidu.com # 测试虚拟机是否可以进行连外网
> ip addr # 查看 ip 地址
环境的准备
- 关闭防火墙:
1 |
|
关闭selinux:
1
2
3
4
> sed -i 's/enforcing/disabled/' /etc/selinux/config
> setenforce 0关闭swap:
1
2
3
4
5> swapoff -a
> vi /etc/fstab
把 swap 那一行进行注释掉 : # /dev/mapper/centos-swap swap swap default 0
1 |
|
- 将桥接的IPv4流量传递到iptables的链:
1
2
3
4
5
6
7
> cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
> sysctl --system
- 时间同步 :
yum install -y ntpdate
ntpdate ntp.api.bz
安装的 docker : 使用阿里云镜像库来进行安装
1 |
|
添加阿里云YUM软件源
1 | > |
安装kubeadm,kubelet和kubectl
- 指定 1.15版本
1
2
3> yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
> systemctl enable kubelet
部署 k8s master
- master node : 172.16.182.130
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28>
kubeadm init \
--apiserver-advertise-address=172.16.182.137 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
成功安装之后:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 172.16.182.134:6443 --token 7p4yoc.np5kdlji6mtflldc \
--discovery-token-ca-cert-hash sha256:a1f6d5775eaed1f13a1eb654416b0971b9b9d5e112138d2793e4f3ffd5c4d24c
使用kubectl工具
1 |
|
安装Pod网络插件
1 |
|
整个安装下来就有相应的 k8s 安装包了,然后就可以进行虚拟机的复制操作。让其他的 node 都有相应的安装包,一样的环境
关机操作
1
> shutdown -h now :立即关机
克隆镜像
1
2
3
4先关机操作 > 进行设置克隆 > copy 出 k8s master node 2个节点:
ip 地址:
k8s-node-1 : 172.16.182.131
k8s-node-2 : 172.16.182.132开机重新的初始化 k8s
本地已经存在 kubeadm 服务了,需要重启 :
kubeadm reset
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23>
kubeadm init \
--apiserver-advertise-address=172.16.182.134 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
再执行:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行的结果:
kubeadm join 172.16.182.134:6443 --token vg18ba.q937acgy9ifamuog \
--discovery-token-ca-cert-hash sha256:356e42541d06ac75084508e3db76a1f7902fa6cb88e5dfa139e1eeb9bc1674a7
kubeadm join 172.16.182.130:6443 --token 52szaz.t3mr0nmth4e4trmb \
--discovery-token-ca-cert-hash sha256:4341cb5fec285e14780ade60fa1935997fbce44a91baef05c50a5959896aca31 \
--ignore-preflight-errors=all
还是有问题
执行 kubectl get nodes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18The connection to the server localhost:8080 was refused - did you specify the right host or port?
将 master 的 admin 文件 copy 到 node 节点上:
> scp /etc/kubernetes/admin.conf root@172.16.182.131:/etc/kubernetes/admin.conf
> scp /etc/kubernetes/admin.conf root@172.16.182.132:/etc/kubernetes/admin.conf
> scp /etc/kubernetes/admin.conf root@172.16.182.133:/etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
在 node 节点:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile在从节点会报 master 的节点的错误,因为我 master 执行过 kubeadm init 指令导致镜像还有证书信息.故需要执行:
kubeadm reset
还有把 swap 关掉swapoff -a
1 |
|
- 从节点就可以执行 kubeadm join 指令了,查看
添加的 node 节点的 host
172.16.182.134 k8s-master
172.16.182.135 k8s-node1
172.16.182.136 k8s-node2
172.16.182.137 k8s-node3
172.16.182.137 k8s-master
172.16.182.130 k8s-master
172.16.182.131 k8s-node1
172.16.182.132 k8s-node2
172.16.182.133 k8s-node3
172.16.182.134 k8s-node4
172.16.182.135 k8s-node5
创建 pod 节点内容
docker pull hub.c.163.com/public/nginx:1.2.1
kubectl create deployment nginx-test –image=hub.c.163.com/public/nginx:1.2.1
kubectl expose deployment nginx-test –port=80 –type=NodePort
kubectl get pod,
kubectl create deployment nginx-k –image=hub.c.163.com/public/nginx:1.2.1
kubectl expose deployment nginx-k –port=81 –type=NodePort
kubectl get pod,svc
1 | zg8cgy.lljuzh1uyoktnrad |
发现 pod 运行的时候报错
[root@localhost kubernetes]# kubectl get pod –namespace=kube-system
NAME READY STATUS RESTARTS AGE
coredns-bccdc95cf-4rwkm 0/1 ContainerCreating 0 13h
coredns-bccdc95cf-pzlhl 0/1 ContainerCreating 0 13h
kube-flannel-ds-amd64-8fljt 0/1 Error 2 13h
kube-flannel-ds-amd64-zfkst 0/1 CrashLoopBackOff 4 60m
kube-proxy-gpsd7 1/1 Running 0 13h
kube-proxy-lml9w 1/1 Running 0 60m
- 查看的 k8s的全部服务的运行的情况 : kubectl get pods –all-namespaces
1
2
3
4
5
6
7
8
9
10
11[root@localhost ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-test-79f9c95576-vdm2d 0/1 Pending 0 4m49s
kube-system coredns-bccdc95cf-dk9qn 0/1 Pending 0 15m
kube-system coredns-bccdc95cf-wdmf6 0/1 Pending 0 15m
kube-system etcd-localhost.localdomain 1/1 Running 0 14m
kube-system kube-apiserver-localhost.localdomain 1/1 Running 0 14m
kube-system kube-controller-manager-localhost.localdomain 1/1 Running 0 14m
kube-system kube-flannel-ds-amd64-blfvw 0/1 Init:0/1 0 10m
kube-system kube-proxy-n7n86 1/1 Running 0 15m
kube-system kube-scheduler-localhost.localdomain 1/1 Running 0 14m
- 部署的 pod 一直在 pending 中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75[root@localhost ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-test-79f9c95576-vdm2d 0/1 Pending 0 6m50s
# 查看原因详情
[root@localhost ~]# kubectl describe pods nginx-k-64bf97c5c7-9s7wm
Name: nginx-test-79f9c95576-vdm2d
Namespace: default
Priority: 0
Node: <none>
Labels: app=nginx-test
pod-template-hash=79f9c95576
Annotations: <none>
Status: Pending
IP:
Controlled By: ReplicaSet/nginx-test-79f9c95576
Containers:
nginx:
Image: hub.c.163.com/public/nginx:1.2.1
Port: <none>
Host Port: <none>
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-6g6b8 (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
default-token-6g6b8:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-6g6b8
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 5s (x9 over 9m13s) default-scheduler 0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.
+ 允许 master 节点可以运行:
NAME STATUS ROLES AGE VERSION
localhost.localdomain NotReady master 36m v1.15.0
## 主节点也可以进行工作而不是负载 没有解决问题
kubectl taint nodes --all node-role.kubernetes.io/master-
## 查看日志内容
journalctl -f -u kubelet.service
错误日志内容:
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.163577 4132 kuberuntime_manager.go:688] createPodSandbox for pod "coredns-bccdc95cf-wdmf6_kube-system(e9f67903-ef2c-4ee3-b74b-08390a50ca85)" failed: rpc error: code = Unknown desc = failed to set up sandbox container "2e5707bd73138ed55e6561f650b1fadc52c1fc1f10a16829672306081f2406c7" network for pod "coredns-bccdc95cf-wdmf6": NetworkPlugin cni failed to set up pod "coredns-bccdc95cf-wdmf6_kube-system" network: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.163627 4132 pod_workers.go:190] Error syncing pod e9f67903-ef2c-4ee3-b74b-08390a50ca85 ("coredns-bccdc95cf-wdmf6_kube-system(e9f67903-ef2c-4ee3-b74b-08390a50ca85)"), skipping: failed to "CreatePodSandbox" for "coredns-bccdc95cf-wdmf6_kube-system(e9f67903-ef2c-4ee3-b74b-08390a50ca85)" with CreatePodSandboxError: "CreatePodSandbox for pod \"coredns-bccdc95cf-wdmf6_kube-system(e9f67903-ef2c-4ee3-b74b-08390a50ca85)\" failed: rpc error: code = Unknown desc = failed to set up sandbox container \"2e5707bd73138ed55e6561f650b1fadc52c1fc1f10a16829672306081f2406c7\" network for pod \"coredns-bccdc95cf-wdmf6\": NetworkPlugin cni failed to set up pod \"coredns-bccdc95cf-wdmf6_kube-system\" network: open /run/flannel/subnet.env: no such file or directory"
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.240120 4132 remote_runtime.go:105] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = failed to set up sandbox container "767300ea7c8db979280b1a0addea975c05654cdb041eb1f8c2c476cd70fede60" network for pod "nginx-k-64bf97c5c7-9s7wm": NetworkPlugin cni failed to set up pod "nginx-k-64bf97c5c7-9s7wm_default" network: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.240154 4132 kuberuntime_sandbox.go:68] CreatePodSandbox for pod "nginx-k-64bf97c5c7-9s7wm_default(453a9e1c-2a96-4c24-a7d9-2ea8895c1637)" failed: rpc error: code = Unknown desc = failed to set up sandbox container "767300ea7c8db979280b1a0addea975c05654cdb041eb1f8c2c476cd70fede60" network for pod "nginx-k-64bf97c5c7-9s7wm": NetworkPlugin cni failed to set up pod "nginx-k-64bf97c5c7-9s7wm_default" network: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.240172 4132 kuberuntime_manager.go:688] createPodSandbox for pod "nginx-k-64bf97c5c7-9s7wm_default(453a9e1c-2a96-4c24-a7d9-2ea8895c1637)" failed: rpc error: code = Unknown desc = failed to set up sandbox container "767300ea7c8db979280b1a0addea975c05654cdb041eb1f8c2c476cd70fede60" network for pod "nginx-k-64bf97c5c7-9s7wm": NetworkPlugin cni failed to set up pod "nginx-k-64bf97c5c7-9s7wm_default" network: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.240207 4132 pod_workers.go:190] Error syncing pod 453a9e1c-2a96-4c24-a7d9-2ea8895c1637 ("nginx-k-64bf97c5c7-9s7wm_default(453a9e1c-2a96-4c24-a7d9-2ea8895c1637)"), skipping: failed to "CreatePodSandbox" for "nginx-k-64bf97c5c7-9s7wm_default(453a9e1c-2a96-4c24-a7d9-2ea8895c1637)" with CreatePodSandboxError: "CreatePodSandbox for pod \"nginx-k-64bf97c5c7-9s7wm_default(453a9e1c-2a96-4c24-a7d9-2ea8895c1637)\" failed: rpc error: code = Unknown desc = failed to set up sandbox container \"767300ea7c8db979280b1a0addea975c05654cdb041eb1f8c2c476cd70fede60\" network for pod \"nginx-k-64bf97c5c7-9s7wm\": NetworkPlugin cni failed to set up pod \"nginx-k-64bf97c5c7-9s7wm_default\" network: open /run/flannel/subnet.env: no such file or directory"
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.244832 4132 cni.go:331] Error adding kube-system_coredns-bccdc95cf-dk9qn/a3c254c236a377a21243c739164b3678ad43591095fc2bdd80511b54bb3ef735 to network flannel/cbr0: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.334985 4132 remote_runtime.go:105] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = failed to set up sandbox container "62d3f366a81cb3b7a9ea01311ba45c64723c92e38b1eb450387db5790f5fb89f" network for pod "nginx-test-79f9c95576-vdm2d": NetworkPlugin cni failed to set up pod "nginx-test-79f9c95576-vdm2d_default" network: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.335069 4132 kuberuntime_sandbox.go:68] CreatePodSandbox for pod "nginx-test-79f9c95576-vdm2d_default(acd00deb-5e92-440f-834e-398348066f7a)" failed: rpc error: code = Unknown desc = failed to set up sandbox container "62d3f366a81cb3b7a9ea01311ba45c64723c92e38b1eb450387db5790f5fb89f" network for pod "nginx-test-79f9c95576-vdm2d": NetworkPlugin cni failed to set up pod "nginx-test-79f9c95576-vdm2d_default" network: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.335090 4132 kuberuntime_manager.go:688] createPodSandbox for pod "nginx-test-79f9c95576-vdm2d_default(acd00deb-5e92-440f-834e-398348066f7a)" failed: rpc error: code = Unknown desc = failed to set up sandbox container "62d3f366a81cb3b7a9ea01311ba45c64723c92e38b1eb450387db5790f5fb89f" network for pod "nginx-test-79f9c95576-vdm2d": NetworkPlugin cni failed to set up pod "nginx-test-79f9c95576-vdm2d_default" network: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.335140 4132 pod_workers.go:190] Error syncing pod acd00deb-5e92-440f-834e-398348066f7a ("nginx-test-79f9c95576-vdm2d_default(acd00deb-5e92-440f-834e-398348066f7a)"), skipping: failed to "CreatePodSandbox" for "nginx-test-79f9c95576-vdm2d_default(acd00deb-5e92-440f-834e-398348066f7a)" with CreatePodSandboxError: "CreatePodSandbox for pod \"nginx-test-79f9c95576-vdm2d_default(acd00deb-5e92-440f-834e-398348066f7a)\" failed: rpc error: code = Unknown desc = failed to set up sandbox container \"62d3f366a81cb3b7a9ea01311ba45c64723c92e38b1eb450387db5790f5fb89f\" network for pod \"nginx-test-79f9c95576-vdm2d\": NetworkPlugin cni failed to set up pod \"nginx-test-79f9c95576-vdm2d_default\" network: open /run/flannel/subnet.env: no such file or directory"
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.391284 4132 remote_runtime.go:105] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = failed to set up sandbox container "a3c254c236a377a21243c739164b3678ad43591095fc2bdd80511b54bb3ef735" network for pod "coredns-bccdc95cf-dk9qn": NetworkPlugin cni failed to set up pod "coredns-bccdc95cf-dk9qn_kube-system" network: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.391328 4132 kuberuntime_sandbox.go:68] CreatePodSandbox for pod "coredns-bccdc95cf-dk9qn_kube-system(533e9a3e-ae7f-4bff-a85e-8dc2b884462e)" failed: rpc error: code = Unknown desc = failed to set up sandbox container "a3c254c236a377a21243c739164b3678ad43591095fc2bdd80511b54bb3ef735" network for pod "coredns-bccdc95cf-dk9qn": NetworkPlugin cni failed to set up pod "coredns-bccdc95cf-dk9qn_kube-system" network: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.391346 4132 kuberuntime_manager.go:688] createPodSandbox for pod "coredns-bccdc95cf-dk9qn_kube-system(533e9a3e-ae7f-4bff-a85e-8dc2b884462e)" failed: rpc error: code = Unknown desc = failed to set up sandbox container "a3c254c236a377a21243c739164b3678ad43591095fc2bdd80511b54bb3ef735" network for pod "coredns-bccdc95cf-dk9qn": NetworkPlugin cni failed to set up pod "coredns-bccdc95cf-dk9qn_kube-system" network: open /run/flannel/subnet.env: no such file or directory
3月 19 16:07:11 k8s-master kubelet[4132]: E0319 16:07:11.391392 4132 pod_workers.go:190] Error syncing pod 533e9a3e-ae7f-4bff-a85e-8dc2b884462e ("coredns-bccdc95cf-dk9qn_kube-system(533e9a3e-ae7f-4bff-a85e-8dc2b884462e)"), skipping: failed to "CreatePodSandbox" for "coredns-bccdc95cf-dk9qn_kube-system(533e9a3e-ae7f-4bff-a85e-8dc2b884462e)" with CreatePodSandboxError: "CreatePodSandbox for pod \"coredns-bccdc95cf-dk9qn_kube-system(533e9a3e-ae7f-4bff-a85e-8dc2b884462e)\" failed: rpc error: code = Unknown desc = failed to set up sandbox container \"a3c254c236a377a21243c739164b3678ad43591095fc2bdd80511b54bb3ef735\" network for pod \"coredns-bccdc95cf-dk9qn\": NetworkPlugin cni failed to set up pod \"coredns-bccdc95cf-dk9qn_kube-system\" network: open /run/flannel/subnet.env: no such file or directory"
37机器的再次尝试
1 |
|
再来一次的尝试操作
1 | iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X |