mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
This tag of hcsshim brings in a couple welcome features/improvements. One being exposing a way to query for hns endpoint statistics (Packets received/sent etc.). This tag also contains some optimizations for querying whether a certain HCN feature is supported, which is a common workflow in kube-proxy on Windows. The first result from querying HCN is now cached so further calls can skip the hcn query as well as the version range parsing that was performed. This also gets rid of some redundant logs that used to hit everytime the version range parsing occurred. The Go-winio dep bump, and all of the ctrd deps are transitive only. Nothing new is needed/intended to be used. Signed-off-by: Daniel Canter <dcanter@microsoft.com>
251 lines
13 KiB
Go
251 lines
13 KiB
Go
package schema1
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/Microsoft/go-winio/pkg/guid"
|
|
hcsschema "github.com/Microsoft/hcsshim/internal/hcs/schema2"
|
|
)
|
|
|
|
// ProcessConfig is used as both the input of Container.CreateProcess
|
|
// and to convert the parameters to JSON for passing onto the HCS
|
|
type ProcessConfig struct {
|
|
ApplicationName string `json:",omitempty"`
|
|
CommandLine string `json:",omitempty"`
|
|
CommandArgs []string `json:",omitempty"` // Used by Linux Containers on Windows
|
|
User string `json:",omitempty"`
|
|
WorkingDirectory string `json:",omitempty"`
|
|
Environment map[string]string `json:",omitempty"`
|
|
EmulateConsole bool `json:",omitempty"`
|
|
CreateStdInPipe bool `json:",omitempty"`
|
|
CreateStdOutPipe bool `json:",omitempty"`
|
|
CreateStdErrPipe bool `json:",omitempty"`
|
|
ConsoleSize [2]uint `json:",omitempty"`
|
|
CreateInUtilityVm bool `json:",omitempty"` // Used by Linux Containers on Windows
|
|
OCISpecification *json.RawMessage `json:",omitempty"` // Used by Linux Containers on Windows
|
|
}
|
|
|
|
type Layer struct {
|
|
ID string
|
|
Path string
|
|
}
|
|
|
|
type MappedDir struct {
|
|
HostPath string
|
|
ContainerPath string
|
|
ReadOnly bool
|
|
BandwidthMaximum uint64
|
|
IOPSMaximum uint64
|
|
CreateInUtilityVM bool
|
|
// LinuxMetadata - Support added in 1803/RS4+.
|
|
LinuxMetadata bool `json:",omitempty"`
|
|
}
|
|
|
|
type MappedPipe struct {
|
|
HostPath string
|
|
ContainerPipeName string
|
|
}
|
|
|
|
type HvRuntime struct {
|
|
ImagePath string `json:",omitempty"`
|
|
SkipTemplate bool `json:",omitempty"`
|
|
LinuxInitrdFile string `json:",omitempty"` // File under ImagePath on host containing an initrd image for starting a Linux utility VM
|
|
LinuxKernelFile string `json:",omitempty"` // File under ImagePath on host containing a kernel for starting a Linux utility VM
|
|
LinuxBootParameters string `json:",omitempty"` // Additional boot parameters for starting a Linux Utility VM in initrd mode
|
|
BootSource string `json:",omitempty"` // "Vhd" for Linux Utility VM booting from VHD
|
|
WritableBootSource bool `json:",omitempty"` // Linux Utility VM booting from VHD
|
|
}
|
|
|
|
type MappedVirtualDisk struct {
|
|
HostPath string `json:",omitempty"` // Path to VHD on the host
|
|
ContainerPath string // Platform-specific mount point path in the container
|
|
CreateInUtilityVM bool `json:",omitempty"`
|
|
ReadOnly bool `json:",omitempty"`
|
|
Cache string `json:",omitempty"` // "" (Unspecified); "Disabled"; "Enabled"; "Private"; "PrivateAllowSharing"
|
|
AttachOnly bool `json:",omitempty"`
|
|
}
|
|
|
|
// AssignedDevice represents a device that has been directly assigned to a container
|
|
//
|
|
// NOTE: Support added in RS5
|
|
type AssignedDevice struct {
|
|
// InterfaceClassGUID of the device to assign to container.
|
|
InterfaceClassGUID string `json:"InterfaceClassGuid,omitempty"`
|
|
}
|
|
|
|
// ContainerConfig is used as both the input of CreateContainer
|
|
// and to convert the parameters to JSON for passing onto the HCS
|
|
type ContainerConfig struct {
|
|
SystemType string // HCS requires this to be hard-coded to "Container"
|
|
Name string // Name of the container. We use the docker ID.
|
|
Owner string `json:",omitempty"` // The management platform that created this container
|
|
VolumePath string `json:",omitempty"` // Windows volume path for scratch space. Used by Windows Server Containers only. Format \\?\\Volume{GUID}
|
|
IgnoreFlushesDuringBoot bool `json:",omitempty"` // Optimization hint for container startup in Windows
|
|
LayerFolderPath string `json:",omitempty"` // Where the layer folders are located. Used by Windows Server Containers only. Format %root%\windowsfilter\containerID
|
|
Layers []Layer // List of storage layers. Required for Windows Server and Hyper-V Containers. Format ID=GUID;Path=%root%\windowsfilter\layerID
|
|
Credentials string `json:",omitempty"` // Credentials information
|
|
ProcessorCount uint32 `json:",omitempty"` // Number of processors to assign to the container.
|
|
ProcessorWeight uint64 `json:",omitempty"` // CPU shares (relative weight to other containers with cpu shares). Range is from 1 to 10000. A value of 0 results in default shares.
|
|
ProcessorMaximum int64 `json:",omitempty"` // Specifies the portion of processor cycles that this container can use as a percentage times 100. Range is from 1 to 10000. A value of 0 results in no limit.
|
|
StorageIOPSMaximum uint64 `json:",omitempty"` // Maximum Storage IOPS
|
|
StorageBandwidthMaximum uint64 `json:",omitempty"` // Maximum Storage Bandwidth in bytes per second
|
|
StorageSandboxSize uint64 `json:",omitempty"` // Size in bytes that the container system drive should be expanded to if smaller
|
|
MemoryMaximumInMB int64 `json:",omitempty"` // Maximum memory available to the container in Megabytes
|
|
HostName string `json:",omitempty"` // Hostname
|
|
MappedDirectories []MappedDir `json:",omitempty"` // List of mapped directories (volumes/mounts)
|
|
MappedPipes []MappedPipe `json:",omitempty"` // List of mapped Windows named pipes
|
|
HvPartition bool // True if it a Hyper-V Container
|
|
NetworkSharedContainerName string `json:",omitempty"` // Name (ID) of the container that we will share the network stack with.
|
|
EndpointList []string `json:",omitempty"` // List of networking endpoints to be attached to container
|
|
HvRuntime *HvRuntime `json:",omitempty"` // Hyper-V container settings. Used by Hyper-V containers only. Format ImagePath=%root%\BaseLayerID\UtilityVM
|
|
Servicing bool `json:",omitempty"` // True if this container is for servicing
|
|
AllowUnqualifiedDNSQuery bool `json:",omitempty"` // True to allow unqualified DNS name resolution
|
|
DNSSearchList string `json:",omitempty"` // Comma seperated list of DNS suffixes to use for name resolution
|
|
ContainerType string `json:",omitempty"` // "Linux" for Linux containers on Windows. Omitted otherwise.
|
|
TerminateOnLastHandleClosed bool `json:",omitempty"` // Should HCS terminate the container once all handles have been closed
|
|
MappedVirtualDisks []MappedVirtualDisk `json:",omitempty"` // Array of virtual disks to mount at start
|
|
AssignedDevices []AssignedDevice `json:",omitempty"` // Array of devices to assign. NOTE: Support added in RS5
|
|
}
|
|
|
|
type ComputeSystemQuery struct {
|
|
IDs []string `json:"Ids,omitempty"`
|
|
Types []string `json:",omitempty"`
|
|
Names []string `json:",omitempty"`
|
|
Owners []string `json:",omitempty"`
|
|
}
|
|
|
|
type PropertyType string
|
|
|
|
const (
|
|
PropertyTypeStatistics PropertyType = "Statistics" // V1 and V2
|
|
PropertyTypeProcessList PropertyType = "ProcessList" // V1 and V2
|
|
PropertyTypeMappedVirtualDisk PropertyType = "MappedVirtualDisk" // Not supported in V2 schema call
|
|
PropertyTypeGuestConnection PropertyType = "GuestConnection" // V1 and V2. Nil return from HCS before RS5
|
|
)
|
|
|
|
type PropertyQuery struct {
|
|
PropertyTypes []PropertyType `json:",omitempty"`
|
|
}
|
|
|
|
// ContainerProperties holds the properties for a container and the processes running in that container
|
|
type ContainerProperties struct {
|
|
ID string `json:"Id"`
|
|
State string
|
|
Name string
|
|
SystemType string
|
|
RuntimeOSType string `json:"RuntimeOsType,omitempty"`
|
|
Owner string
|
|
SiloGUID string `json:"SiloGuid,omitempty"`
|
|
RuntimeID guid.GUID `json:"RuntimeId,omitempty"`
|
|
IsRuntimeTemplate bool `json:",omitempty"`
|
|
RuntimeImagePath string `json:",omitempty"`
|
|
Stopped bool `json:",omitempty"`
|
|
ExitType string `json:",omitempty"`
|
|
AreUpdatesPending bool `json:",omitempty"`
|
|
ObRoot string `json:",omitempty"`
|
|
Statistics Statistics `json:",omitempty"`
|
|
ProcessList []ProcessListItem `json:",omitempty"`
|
|
MappedVirtualDiskControllers map[int]MappedVirtualDiskController `json:",omitempty"`
|
|
GuestConnectionInfo GuestConnectionInfo `json:",omitempty"`
|
|
}
|
|
|
|
// MemoryStats holds the memory statistics for a container
|
|
type MemoryStats struct {
|
|
UsageCommitBytes uint64 `json:"MemoryUsageCommitBytes,omitempty"`
|
|
UsageCommitPeakBytes uint64 `json:"MemoryUsageCommitPeakBytes,omitempty"`
|
|
UsagePrivateWorkingSetBytes uint64 `json:"MemoryUsagePrivateWorkingSetBytes,omitempty"`
|
|
}
|
|
|
|
// ProcessorStats holds the processor statistics for a container
|
|
type ProcessorStats struct {
|
|
TotalRuntime100ns uint64 `json:",omitempty"`
|
|
RuntimeUser100ns uint64 `json:",omitempty"`
|
|
RuntimeKernel100ns uint64 `json:",omitempty"`
|
|
}
|
|
|
|
// StorageStats holds the storage statistics for a container
|
|
type StorageStats struct {
|
|
ReadCountNormalized uint64 `json:",omitempty"`
|
|
ReadSizeBytes uint64 `json:",omitempty"`
|
|
WriteCountNormalized uint64 `json:",omitempty"`
|
|
WriteSizeBytes uint64 `json:",omitempty"`
|
|
}
|
|
|
|
// NetworkStats holds the network statistics for a container
|
|
type NetworkStats struct {
|
|
BytesReceived uint64 `json:",omitempty"`
|
|
BytesSent uint64 `json:",omitempty"`
|
|
PacketsReceived uint64 `json:",omitempty"`
|
|
PacketsSent uint64 `json:",omitempty"`
|
|
DroppedPacketsIncoming uint64 `json:",omitempty"`
|
|
DroppedPacketsOutgoing uint64 `json:",omitempty"`
|
|
EndpointId string `json:",omitempty"`
|
|
InstanceId string `json:",omitempty"`
|
|
}
|
|
|
|
// Statistics is the structure returned by a statistics call on a container
|
|
type Statistics struct {
|
|
Timestamp time.Time `json:",omitempty"`
|
|
ContainerStartTime time.Time `json:",omitempty"`
|
|
Uptime100ns uint64 `json:",omitempty"`
|
|
Memory MemoryStats `json:",omitempty"`
|
|
Processor ProcessorStats `json:",omitempty"`
|
|
Storage StorageStats `json:",omitempty"`
|
|
Network []NetworkStats `json:",omitempty"`
|
|
}
|
|
|
|
// ProcessList is the structure of an item returned by a ProcessList call on a container
|
|
type ProcessListItem struct {
|
|
CreateTimestamp time.Time `json:",omitempty"`
|
|
ImageName string `json:",omitempty"`
|
|
KernelTime100ns uint64 `json:",omitempty"`
|
|
MemoryCommitBytes uint64 `json:",omitempty"`
|
|
MemoryWorkingSetPrivateBytes uint64 `json:",omitempty"`
|
|
MemoryWorkingSetSharedBytes uint64 `json:",omitempty"`
|
|
ProcessId uint32 `json:",omitempty"`
|
|
UserTime100ns uint64 `json:",omitempty"`
|
|
}
|
|
|
|
// MappedVirtualDiskController is the structure of an item returned by a MappedVirtualDiskList call on a container
|
|
type MappedVirtualDiskController struct {
|
|
MappedVirtualDisks map[int]MappedVirtualDisk `json:",omitempty"`
|
|
}
|
|
|
|
// GuestDefinedCapabilities is part of the GuestConnectionInfo returned by a GuestConnection call on a utility VM
|
|
type GuestDefinedCapabilities struct {
|
|
NamespaceAddRequestSupported bool `json:",omitempty"`
|
|
SignalProcessSupported bool `json:",omitempty"`
|
|
DumpStacksSupported bool `json:",omitempty"`
|
|
DeleteContainerStateSupported bool `json:",omitempty"`
|
|
UpdateContainerSupported bool `json:",omitempty"`
|
|
}
|
|
|
|
// GuestConnectionInfo is the structure of an iterm return by a GuestConnection call on a utility VM
|
|
type GuestConnectionInfo struct {
|
|
SupportedSchemaVersions []hcsschema.Version `json:",omitempty"`
|
|
ProtocolVersion uint32 `json:",omitempty"`
|
|
GuestDefinedCapabilities GuestDefinedCapabilities `json:",omitempty"`
|
|
}
|
|
|
|
// Type of Request Support in ModifySystem
|
|
type RequestType string
|
|
|
|
// Type of Resource Support in ModifySystem
|
|
type ResourceType string
|
|
|
|
// RequestType const
|
|
const (
|
|
Add RequestType = "Add"
|
|
Remove RequestType = "Remove"
|
|
Network ResourceType = "Network"
|
|
)
|
|
|
|
// ResourceModificationRequestResponse is the structure used to send request to the container to modify the system
|
|
// Supported resource types are Network and Request Types are Add/Remove
|
|
type ResourceModificationRequestResponse struct {
|
|
Resource ResourceType `json:"ResourceType"`
|
|
Data interface{} `json:"Settings"`
|
|
Request RequestType `json:"RequestType,omitempty"`
|
|
}
|