前戏:

master:192.168.1.7 4核心。2G内存 <-- 很重要!

node1:192.168.1.8 2核心1G内存

1 关闭防火墙

[root@bogon ~]# systemctl stop firewalld

 

2 修改主机名

[root@bogon ~]# hostnamectl set-hostname k8s-master
[root@bogon ~]# hostnamectl set-hostname k8s-node1

 3 修改hosts文件

vim /etc/hosts

192.168.1.7 k8s-master
192.168.1.8 k8s-node1

 4 安装docker

[root@localhost ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
[root@localhost ~]# yum -y install docker-ce-18.06.3.ce-3.el7
[root@localhost ~]# systemctl enable docker && systemctl start docker

 5 禁用swap内存交换

swapoff -a
echo "swapoff -a" >>/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
#或开机禁用swap: 编辑/etc/fstab --> 注释掉swap 分区

 6 yum -y install ntpdate  务必要保证服务器的时间同步!!

ntpate 2.cn.pool.ntp.org

+++++++++++++++k8s安装++++++++++++++++

1 配置yum源

vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes Repostiory
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enable=1
gpgcheck=0

 然后运行yum install 命令安装kubeadm 和相关工具

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

2 启动docker 服务和kubelet服务

systemctl enable docker
systemctl enable kubelet
systemctl start docker
systemctl start kubelet

 3 kubeadm config

输出kubeadm init 默认参数文件。

kubeadm config print init-defaults > init-config.yaml

将1.2.3.4 修改为master地址

localAPIEndpoint:
  advertiseAddress: 192.168.1.7
  bindPort: 6443

 

修改镜像下载源为阿里云。imageRepository: registry.aliyuncs.com/google_containers

imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.17.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12

 

 4 下载kubernetes 的相关镜像

kubeadm  config images pull --config=init-config.yaml

 

 

 

 5 运行kubeadm init 命令安装master

[root@master ~]# kubeadm init --config=init-config.yaml 

 

 

 

 编辑/etc/hosts 文件

 

 

 

 

echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables

 

 禁用swap内存交换

swapoff -a
echo "swapoff -a" >>/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
#或开机禁用swap: 编辑/etc/fstab --> 注释掉swap 分区

 再次运行kubeadm init --config=init-config.yaml,过一段时间kubernetes的master安装成功,显示如下信息

 

 按照提示执行下面的命令,复制配置文件到普通用户的home目录下

[root@bogon ~]# mkdir -p $HOME/.kube
[root@bogon ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@bogon ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@bogon ~]# 

 这样就在master上安装kubernetes,但在集群内还是没有可用的工作node,并缺乏对荣齐全网络的配置

6 安装node,加入集群

6.1 安装kubeadm和相关工具

yum -y install kubelet kubeadm --disableexcludes=kubernetes

6.2 设置开机启动

[root@node1 ~]# systemctl enable kubelet
[root@node1 ~]# systemctl start kubelet

 6.3 node节点上运行kuberadm config 命令生成join-config.yaml文件

kubeadm config print join-defaults >join-config.yaml

 6.4 编辑join-config.yaml文件

 

 

 将node1加入集群

 

 

 7 master节点上运行

[root@bogon ~]# kubectl get nodes
NAME    STATUS     ROLES    AGE     VERSION
bogon   NotReady   master   87m     v1.17.3
node1   NotReady   <none>   3m48s   v1.17.3

 状态为notready,那是因为还没有安装CNI网络插件

8 安装网络插件Falnnel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

如果连接raw.githubusercontent.com报错的话,请执行以下操作:

https://site.ip138.com/raw.Githubusercontent.com/ 

 

 

编辑/etc/hosts

 

 

如果flanel容器报错信息如下

E0210 17:48:11.111441       1 main.go:289] Error registering network: failed to acquire lease: node "bogon" pod cidr not assigned
请执行下面这个命令

 

以merge的形式修改资源对象的部分字段的值。这里的ip地址跟集群初始化时定义的要一致,负责会报错

kubectl patch node k8s-master -p '{"spec":{"podCIDR":"10.244.0.0/12"}}'
kubectl patch node k8s-node1 -p '{"spec":{"podCIDR":"10.244.0.0/12"}}'

 

 9 验证

[root@bogon ~]# kubectl  get nodes
NAME    STATUS   ROLES    AGE     VERSION
bogon   Ready    master   3h32m   v1.17.3
node1   Ready    <none>   128m    v1.17.3

10 实战 创建一个Deployment

[root@bogon ~]# kubectl  run nginx --image=nginx
pod/nginx created
[root@bogon ~]# kubectl get pods
NAME    READY   STATUS              RESTARTS   AGE
nginx   0/1     ContainerCreating   0          14s

 查看pod的详细信息

[root@bogon ~]# kubectl describe pod nginx
Name:         nginx
Namespace:    default
Priority:     0
Node:         k8s-node1/192.168.1.10
Start Time:   Mon, 22 Jun 2020 21:45:51 +0800
Labels:       run=nginx
Annotations:  <none>
Status:       Running
IP:           10.240.0.3
IPs:
  IP:  10.240.0.3
Containers:
  nginx:
    Container ID:   docker://c6895ad845cd044288cdb9b31dc4dda771d45427d58c62079273abef1b2e30ed
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Mon, 22 Jun 2020 21:46:05 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-c4bz5 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-c4bz5:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-c4bz5
    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
  ----    ------     ----  ----                -------
  Normal  Scheduled  61s   default-scheduler   Successfully assigned default/nginx to k8s-node1
  Normal  Pulling    60s   kubelet, k8s-node1  Pulling image "nginx"
  Normal  Pulled     48s   kubelet, k8s-node1  Successfully pulled image "nginx"
  Normal  Created    47s   kubelet, k8s-node1  Created container nginx
  Normal  Started    47s   kubelet, k8s-node1  Started container nginx

 

[root@bogon ~]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          3m11s

 

11 排查错误 看日志

tailf /var/log/messages

举个例子:

kubectl  logs pod/kube-controller-manager-k8s-master --namespace=kube-system