前戏:
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